rpms/kernel/F-7 linux-2.6-acpi-disable-cstates-in-suspend.patch, NONE, 1.1 linux-2.6-acpi-kill-dmesg-spam.patch, NONE, 1.1 linux-2.6-libata-pata_sis-dma-add-missing-entry.patch, NONE, 1.1 linux-2.6-libata-pata_sis-fix-dma-timing.patch, NONE, 1.1 linux-2.6-libata-sata_sil24-fix-irq-clearing-race.patch, NONE, 1.1 linux-2.6-net-r8169-correct-phy-parameters-for-the-8110SC.patch, NONE, 1.1 linux-2.6-net-r8169-workaround-against-ignored-TxPoll-writes-8168.patch, NONE, 1.1 linux-2.6-net-sfq-fix-oops-with-2.patch, NONE, 1.1 kernel-2.6.spec, 1.3347, 1.3348

Chuck Ebbert (cebbert) fedora-extras-commits at redhat.com
Wed Sep 26 23:18:44 UTC 2007


Author: cebbert

Update of /cvs/pkgs/rpms/kernel/F-7
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv31745

Modified Files:
	kernel-2.6.spec 
Added Files:
	linux-2.6-acpi-disable-cstates-in-suspend.patch 
	linux-2.6-acpi-kill-dmesg-spam.patch 
	linux-2.6-libata-pata_sis-dma-add-missing-entry.patch 
	linux-2.6-libata-pata_sis-fix-dma-timing.patch 
	linux-2.6-libata-sata_sil24-fix-irq-clearing-race.patch 
	linux-2.6-net-r8169-correct-phy-parameters-for-the-8110SC.patch 
	linux-2.6-net-r8169-workaround-against-ignored-TxPoll-writes-8168.patch 
	linux-2.6-net-sfq-fix-oops-with-2.patch 
Log Message:
* Wed Sep 26 2007 Chuck Ebbert <cebbert at redhat.com>
- libata pata_sis: DMA fixes (#202291)
- libata sata_sil24: IRQ clearing race fixes
- net driver r8169: fix hanging (#252955, #292161)
- qdisc sfq: fix oops with 2 packet queue (#219895)
- ACPI: disable processor C-states suring suspend
- ACPI: silence noisy message


linux-2.6-acpi-disable-cstates-in-suspend.patch:

--- NEW FILE linux-2.6-acpi-disable-cstates-in-suspend.patch ---
Gitweb:     http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=b04e7bdb984e3b7f62fb7f44146a529f88cc7639
Commit:     b04e7bdb984e3b7f62fb7f44146a529f88cc7639
Parent:     1f0cff6e4d579ab0fe671c02fcd842694e46b90f
Author:     Thomas Gleixner <tglx at linutronix.de>
AuthorDate: Sat Sep 22 22:29:05 2007 +0000
Committer:  Linus Torvalds <torvalds at woody.linux-foundation.org>
CommitDate: Sat Sep 22 17:15:34 2007 -0700

    ACPI: disable lower idle C-states across suspend/resume
    
    device_suspend() calls ACPI suspend functions, which seems to have undesired
    side effects on lower idle C-states. It took me some time to realize that
    especially the VAIO BIOSes (both Andrews jinxed UP and my elfstruck SMP one)
    show this effect. I'm quite sure that other bug reports against suspend/resume
    about turning the system into a brick have the same root cause.
    
    After fishing in the dark for quite some time, I realized that removing the ACPI
    processor module before suspend (this removes the lower C-state functionality)
    made the problem disappear. Interestingly enough the propability of having a
    bricked box is influenced by various factors (interrupts, size of the ram image,
    ...). Even adding a bunch of printks in the wrong places made the problem go
    away. The previous periodic tick implementation simply pampered over the
    problem, which explains why the dyntick / clockevents changes made this more
    prominent.
    
    We avoid complex functionality during the boot process and we have to do the
    same during suspend/resume. It is a similar scenario and equaly fragile.
    
    Add suspend / resume functions to the ACPI processor code and disable the lower
    idle C-states across suspend/resume. Fall back to the default idle
    implementation (halt) instead.
    
    Signed-off-by: Thomas Gleixner <tglx at linutronix.de>
    Tested-by: Andrew Morton <akpm at linux-foundation.org>
    Cc: Len Brown <lenb at kernel.org>
    Cc: Venkatesh Pallipadi <venkatesh.pallipadi at intel.com>
    Cc: Rafael J. Wysocki <rjw at sisk.pl>
    Signed-off-by: Linus Torvalds <torvalds at linux-foundation.org>
---
 drivers/acpi/processor_core.c |    2 ++
 drivers/acpi/processor_idle.c |   19 ++++++++++++++++++-
 include/acpi/processor.h      |    2 ++
 3 files changed, 22 insertions(+), 1 deletions(-)

diff --git a/drivers/acpi/processor_core.c b/drivers/acpi/processor_core.c
index 2afb3d2..9f11dc2 100644
--- a/drivers/acpi/processor_core.c
+++ b/drivers/acpi/processor_core.c
@@ -102,6 +102,8 @@ static struct acpi_driver acpi_processor_driver = {
 		.add = acpi_processor_add,
 		.remove = acpi_processor_remove,
 		.start = acpi_processor_start,
+		.suspend = acpi_processor_suspend,
+		.resume = acpi_processor_resume,
 		},
 };
 
diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c
index d9b8af7..f182613 100644
--- a/drivers/acpi/processor_idle.c
+++ b/drivers/acpi/processor_idle.c
@@ -325,6 +325,23 @@ static void acpi_state_timer_broadcast(struct acpi_processor *pr,
 
 #endif
 
+/*
+ * Suspend / resume control
+ */
+static int acpi_idle_suspend;
+
+int acpi_processor_suspend(struct acpi_device * device, pm_message_t state)
+{
+	acpi_idle_suspend = 1;
+	return 0;
+}
+
+int acpi_processor_resume(struct acpi_device * device)
+{
+	acpi_idle_suspend = 0;
+	return 0;
+}
+
 static void acpi_processor_idle(void)
 {
 	struct acpi_processor *pr = NULL;
@@ -355,7 +372,7 @@ static void acpi_processor_idle(void)
 	}
 
 	cx = pr->power.state;
-	if (!cx) {
+	if (!cx || acpi_idle_suspend) {
 		if (pm_idle_save)
 			pm_idle_save();
 		else
diff --git a/include/acpi/processor.h b/include/acpi/processor.h
index ec3ffda..99934a9 100644
--- a/include/acpi/processor.h
+++ b/include/acpi/processor.h
@@ -320,6 +320,8 @@ int acpi_processor_power_init(struct acpi_processor *pr,
 int acpi_processor_cst_has_changed(struct acpi_processor *pr);
 int acpi_processor_power_exit(struct acpi_processor *pr,
 			      struct acpi_device *device);
+int acpi_processor_suspend(struct acpi_device * device, pm_message_t state);
+int acpi_processor_resume(struct acpi_device * device);
 
 /* in processor_thermal.c */
 int acpi_processor_get_limit_info(struct acpi_processor *pr);

linux-2.6-acpi-kill-dmesg-spam.patch:

--- NEW FILE linux-2.6-acpi-kill-dmesg-spam.patch ---
Gitweb:     http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=7f10cc4e838c2b2d7272031954c56c407569d497
Commit:     7f10cc4e838c2b2d7272031954c56c407569d497
Parent:     a21101c46ca5b4320e31408853cdcbf7cb1ce4ed
Author:     Maik Broemme <mbroemme at plusserver.de>
AuthorDate: Fri Sep 14 22:12:34 2007 +0200
Committer:  Len Brown <len.brown at intel.com>
CommitDate: Tue Sep 18 13:45:20 2007 -0400

    ACPI: video: remove dmesg spam
    
    i am actually heavily using the ACPI video extension for my Thinkpad X61
    Tablet. I have bound the input events triggered by the brightness
    up/down keys to a simple
    
    echo <value> > /sys/class/backlight/acpi_video1/brightness
    
    but everytime the event is triggered and acpi_video_device_lcd_set_level()
    is called i got a notificication in my kernel log like:
    
    set_level status: 0
    set_level status: 0
    set_level status: 0
    set_level status: 0
    ...
    
    Signed-off-by: Maik Broemme <mbroemme at plusserver.de>
    Signed-off-by: Len Brown <len.brown at intel.com>
---
 drivers/acpi/video.c |    1 -
 1 files changed, 0 insertions(+), 1 deletions(-)

diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c
index 6cb3e7b..d05891f 100644
--- a/drivers/acpi/video.c
+++ b/drivers/acpi/video.c
@@ -417,7 +417,6 @@ acpi_video_device_lcd_set_level(struct acpi_video_device *device, int level)
 	arg0.integer.value = level;
 	status = acpi_evaluate_object(device->dev->handle, "_BCM", &args, NULL);
 
-	printk(KERN_DEBUG "set_level status: %x\n", status);
 	return status;
 }
 

linux-2.6-libata-pata_sis-dma-add-missing-entry.patch:

--- NEW FILE linux-2.6-libata-pata_sis-dma-add-missing-entry.patch ---
Gitweb:     http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=edeb614c1c8388b354d93ff7790317cc5d6a38ec
Commit:     edeb614c1c8388b354d93ff7790317cc5d6a38ec
Parent:     228f47b959a0cf2e24c9696757c7e6510334e499
Author:     Tejun Heo <htejun at gmail.com>
AuthorDate: Fri Sep 21 16:29:05 2007 +0900
Committer:  Jeff Garzik <jeff at garzik.org>
CommitDate: Tue Sep 25 21:30:56 2007 -0400

    pata_sis: add missing UDMA5 timing value in sis_66_set_dmamode()
    
    sis_66_set_dmamode() also handles early UDMA100 (SIS630 ET) but is
    missing udma timing value for UDMA100.  According to sis5513, this
    should be 0x8000.  This caused UDMA100 device to fail on pata_sis till
    it downgrades to UDMA66 while it works fine on sis5513 at UDMA100.
    
    Reported by Adam Blech.
    
    Signed-off-by: Tejun Heo <htejun at gmail.com>
    Cc: Adam Blech <desaster.area at addcom.de>
    Signed-off-by: Jeff Garzik <jeff at garzik.org>

bz 202291

---
 drivers/ata/pata_sis.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/drivers/ata/pata_sis.c b/drivers/ata/pata_sis.c
index 2bd7645..cce2834 100644
--- a/drivers/ata/pata_sis.c
+++ b/drivers/ata/pata_sis.c
@@ -375,8 +375,9 @@ static void sis_66_set_dmamode (struct ata_port *ap, struct ata_device *adev)
 	int drive_pci = sis_old_port_base(adev);
 	u16 timing;
 
+	/* MWDMA 0-2 and UDMA 0-5 */
 	const u16 mwdma_bits[] = { 0x008, 0x302, 0x301 };
-	const u16 udma_bits[]  = { 0xF000, 0xD000, 0xB000, 0xA000, 0x9000};
+	const u16 udma_bits[]  = { 0xF000, 0xD000, 0xB000, 0xA000, 0x9000, 0x8000 };
 
 	pci_read_config_word(pdev, drive_pci, &timing);
 

linux-2.6-libata-pata_sis-fix-dma-timing.patch:

--- NEW FILE linux-2.6-libata-pata_sis-fix-dma-timing.patch ---

# HG changeset patch
# User Bartlomiej Zolnierkiewicz <bzolnier at gmail.com>
# Date 1185976856 14400
# Node ID f5e5b307727d7fb820ccc9d77de29c837dd90e95
# Parent 1130c2b7409a2eb135ebc61dfd3c784d1cea7eda
pata_sis: fix MWDMA for <= UDMA66 chipsets and UDMA for UDMA33 chipsets

* Fix MWDMA timings setup in sis_old_set_dmamode() and sis_66_set_dmamode().

  The old timings were overclocked (even worse behavior than sis5513 IDE driver
  which depends on BIOS to program correct timings), the new timings are taken
  from the datasheet (they match timings from ATA spec).

* Fix UDMA timings setup in sis_old_set_dmamode().

  Misplaced pci_write_config_word() call resulted in UDMA timings never
  being set.

* Fix comments for sis_133_early_set_dmamode() and sis_133_set_dmamode():
  - only the former function handles early SiS 961 bridges
  - both functions lack MWDMA timings setup

* Fix typos in sis_100_set_piomode() and sis_133_set_piomode() comments.

* Bump driver version.

Cc: Alan Cox <alan at lxorguk.ukuu.org.uk>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier at gmail.com>
Signed-off-by: Jeff Garzik <jeff at garzik.org>

committer: Jeff Garzik <jeff at garzik.org>

--- a/drivers/ata/pata_sis.c	Wed Aug 01 10:00:56 2007 -0400
+++ b/drivers/ata/pata_sis.c	Wed Aug 01 10:00:56 2007 -0400
@@ -2,6 +2,7 @@
  *    pata_sis.c - SiS ATA driver
  *
  *	(C) 2005 Red Hat <alan at redhat.com>
+ *	(C) 2007 Bartlomiej Zolnierkiewicz
  *
  *    Based upon linux/drivers/ide/pci/sis5513.c
  * Copyright (C) 1999-2000	Andre Hedrick <andre at linux-ide.org>
@@ -35,7 +36,7 @@
 #include "sis.h"
 
 #define DRV_NAME	"pata_sis"
-#define DRV_VERSION	"0.5.1"
+#define DRV_VERSION	"0.5.2"
 
 struct sis_chipset {
 	u16 device;				/* PCI host ID */
@@ -237,7 +238,7 @@ static void sis_old_set_piomode (struct 
 }
 
 /**
- *	sis_100_set_pioode - Initialize host controller PATA PIO timings
+ *	sis_100_set_piomode - Initialize host controller PATA PIO timings
  *	@ap: Port whose timings we are configuring
  *	@adev: Device we are configuring for.
  *
@@ -262,7 +263,7 @@ static void sis_100_set_piomode (struct 
 }
 
 /**
- *	sis_133_set_pioode - Initialize host controller PATA PIO timings
+ *	sis_133_set_piomode - Initialize host controller PATA PIO timings
  *	@ap: Port whose timings we are configuring
  *	@adev: Device we are configuring for.
  *
@@ -334,7 +335,7 @@ static void sis_old_set_dmamode (struct 
 	int drive_pci = sis_old_port_base(adev);
 	u16 timing;
 
-	const u16 mwdma_bits[] = { 0x707, 0x202, 0x202 };
+	const u16 mwdma_bits[] = { 0x008, 0x302, 0x301 };
 	const u16 udma_bits[]  = { 0xE000, 0xC000, 0xA000 };
 
 	pci_read_config_word(pdev, drive_pci, &timing);
@@ -342,15 +343,15 @@ static void sis_old_set_dmamode (struct 
 	if (adev->dma_mode < XFER_UDMA_0) {
 		/* bits 3-0 hold recovery timing bits 8-10 active timing and
 		   the higer bits are dependant on the device */
-		timing &= ~ 0x870F;
+		timing &= ~0x870F;
 		timing |= mwdma_bits[speed];
-		pci_write_config_word(pdev, drive_pci, timing);
 	} else {
 		/* Bit 15 is UDMA on/off, bit 13-14 are cycle time */
 		speed = adev->dma_mode - XFER_UDMA_0;
 		timing &= ~0x6000;
 		timing |= udma_bits[speed];
 	}
+	pci_write_config_word(pdev, drive_pci, timing);
 }
 
 /**
@@ -373,7 +374,7 @@ static void sis_66_set_dmamode (struct a
 	int drive_pci = sis_old_port_base(adev);
 	u16 timing;
 
-	const u16 mwdma_bits[] = { 0x707, 0x202, 0x202 };
+	const u16 mwdma_bits[] = { 0x008, 0x302, 0x301 };
 	const u16 udma_bits[]  = { 0xF000, 0xD000, 0xB000, 0xA000, 0x9000};
 
 	pci_read_config_word(pdev, drive_pci, &timing);
@@ -432,8 +433,7 @@ static void sis_100_set_dmamode (struct 
  *	@adev: Device to program
  *
  *	Set UDMA/MWDMA mode for device, in host controller PCI config space.
- *	Handles early SiS 961 bridges. Supports MWDMA as well unlike
- *	the old ide/pci driver.
+ *	Handles early SiS 961 bridges.
  *
  *	LOCKING:
  *	None (inherited from caller).
@@ -467,8 +467,6 @@ static void sis_133_early_set_dmamode (s
  *	@adev: Device to program
  *
  *	Set UDMA/MWDMA mode for device, in host controller PCI config space.
- *	Handles early SiS 961 bridges. Supports MWDMA as well unlike
- *	the old ide/pci driver.
  *
  *	LOCKING:
  *	None (inherited from caller).


linux-2.6-libata-sata_sil24-fix-irq-clearing-race.patch:

--- NEW FILE linux-2.6-libata-sata_sil24-fix-irq-clearing-race.patch ---
Gitweb:     http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=228f47b959a0cf2e24c9696757c7e6510334e499
Commit:     228f47b959a0cf2e24c9696757c7e6510334e499
Parent:     4942de4a0e914f205d351a81873f4f63986bcc3c
Author:     Tejun Heo <htejun at gmail.com>
AuthorDate: Sun Sep 23 12:37:05 2007 +0900
Committer:  Jeff Garzik <jeff at garzik.org>
CommitDate: Tue Sep 25 21:30:56 2007 -0400

    sata_sil24: fix IRQ clearing race when PCIX_IRQ_WOC is used
    
    When PCIX_IRQ_WOC is used, sil24 has an inherent race condition
    between clearing IRQ pending and reading IRQ status.  If IRQ pending
    is cleared after reading IRQ status, there's possibility of lost IRQ.
    If IRQ pending is cleared before reading IRQ status, spurious IRQs
    will occur.
    
    sata_sil24 till now cleared IRQ pending after reading IRQ status thus
    losing IRQs on machines where PCIX_IRQ_WOC was used.  Reverse the
    order and ignore spurious IRQs if PCIX_IRQ_WOC.
    
    Signed-off-by: Tejun Heo <htejun at gmail.com>
    Signed-off-by: Jeff Garzik <jeff at garzik.org>
---
 drivers/ata/sata_sil24.c |   16 ++++++++++++----
 1 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/drivers/ata/sata_sil24.c b/drivers/ata/sata_sil24.c
index ef83e6b..233e886 100644
--- a/drivers/ata/sata_sil24.c
+++ b/drivers/ata/sata_sil24.c
@@ -888,6 +888,16 @@ static inline void sil24_host_intr(struct ata_port *ap)
 	u32 slot_stat, qc_active;
 	int rc;
 
+	/* If PCIX_IRQ_WOC, there's an inherent race window between
+	 * clearing IRQ pending status and reading PORT_SLOT_STAT
+	 * which may cause spurious interrupts afterwards.  This is
+	 * unavoidable and much better than losing interrupts which
+	 * happens if IRQ pending is cleared after reading
+	 * PORT_SLOT_STAT.
+	 */
+	if (ap->flags & SIL24_FLAG_PCIX_IRQ_WOC)
+		writel(PORT_IRQ_COMPLETE, port + PORT_IRQ_STAT);
+
 	slot_stat = readl(port + PORT_SLOT_STAT);
 
 	if (unlikely(slot_stat & HOST_SSTAT_ATTN)) {
@@ -895,9 +905,6 @@ static inline void sil24_host_intr(struct ata_port *ap)
 		return;
 	}
 
-	if (ap->flags & SIL24_FLAG_PCIX_IRQ_WOC)
-		writel(PORT_IRQ_COMPLETE, port + PORT_IRQ_STAT);
-
 	qc_active = slot_stat & ~HOST_SSTAT_ATTN;
 	rc = ata_qc_complete_multiple(ap, qc_active, sil24_finish_qc);
 	if (rc > 0)
@@ -910,7 +917,8 @@ static inline void sil24_host_intr(struct ata_port *ap)
 		return;
 	}
 
-	if (ata_ratelimit())
+	/* spurious interrupts are expected if PCIX_IRQ_WOC */
+	if (!(ap->flags & SIL24_FLAG_PCIX_IRQ_WOC) && ata_ratelimit())
 		ata_port_printk(ap, KERN_INFO, "spurious interrupt "
 			"(slot_stat 0x%x active_tag %d sactive 0x%x)\n",
 			slot_stat, ap->active_tag, ap->sactive);

linux-2.6-net-r8169-correct-phy-parameters-for-the-8110SC.patch:

--- NEW FILE linux-2.6-net-r8169-correct-phy-parameters-for-the-8110SC.patch ---
Gitweb:     http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=65d916d95314566f426cc40ff0f17b754a773b0b
Commit:     65d916d95314566f426cc40ff0f17b754a773b0b
Parent:     a88a8eff1e6e32d3288986a9d36c6a449c032d3a
Author:     Edward Hsu <edward_hsu at realtek.com.tw>
AuthorDate: Fri Aug 17 10:14:36 2007 +0200
Committer:  Francois Romieu <romieu at electric-eye.fr.zoreil.com>
CommitDate: Wed Sep 19 21:52:18 2007 +0200

    r8169: correct phy parameters for the 8110SC
    
    The phys of the 8110SC (RTL_GIGA_MAC_VER_{05/06}) act abnormally in
    gigabit mode if they are applied the parameters in rtl8169_hw_phy_config
    which actually aim the 8110S/SB.
    
    It is ok to return early from rtl8169_hw_phy_config as it does not
    apply to the 8101 and 8168 families.
    
    Signed-off-by: Edward Hsu <edward_hsu at realtek.com.tw>
    Signed-off-by: Francois Romieu <romieu at fr.zoreil.com>
---
 drivers/net/r8169.c |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)

diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c
index b85ab4a..d9bb51b 100644
--- a/drivers/net/r8169.c
+++ b/drivers/net/r8169.c
@@ -1228,7 +1228,10 @@ static void rtl8169_hw_phy_config(struct net_device *dev)
 		return;
 	}
 
-	/* phy config for RTL8169s mac_version C chip */
+	if ((tp->mac_version != RTL_GIGA_MAC_VER_02) &&
+	    (tp->mac_version != RTL_GIGA_MAC_VER_03))
+		return;
+
 	mdio_write(ioaddr, 31, 0x0001);			//w 31 2 0 1
 	mdio_write(ioaddr, 21, 0x1000);			//w 21 15 0 1000
 	mdio_write(ioaddr, 24, 0x65c7);			//w 24 15 0 65c7

linux-2.6-net-r8169-workaround-against-ignored-TxPoll-writes-8168.patch:

--- NEW FILE linux-2.6-net-r8169-workaround-against-ignored-TxPoll-writes-8168.patch ---
Gitweb:     http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=d78ae2dcc2acebb9a1048278f47f762c069db75c
Commit:     d78ae2dcc2acebb9a1048278f47f762c069db75c
Parent:     65d916d95314566f426cc40ff0f17b754a773b0b
Author:     Francois Romieu <romieu at fr.zoreil.com>
AuthorDate: Sun Aug 26 20:08:19 2007 +0200
Committer:  Francois Romieu <romieu at electric-eye.fr.zoreil.com>
CommitDate: Wed Sep 19 21:52:18 2007 +0200

    r8169: workaround against ignored TxPoll writes (8168)
    
    The 8168 ignores the requests to fetch the Tx descriptors when
    the relevant TxPoll bit is already set. It easily kills the
    performances of the 8168. David Gundersen has noticed that it
    is enough to wait for the completion of the DMA transfer (NPQ
    bit is cleared) before writing the TxPoll register again.
    
    The extra IO traffic added by the proposed workaround could be
    minimalized but it is not a high-priority task.
    
    Fix for:
    http://bugzilla.kernel.org/show_bug.cgi?id=7924
    http://bugzilla.kernel.org/show_bug.cgi?id=8688
    (http://bugzilla.kernel.org/show_bug.cgi?id=7555 ?)
    
    Signed-off-by: Francois Romieu <romieu at fr.zoreil.com>
    Cc: David Gundersen <gundy at iinet.net.au>
    Cc: Edward Hsu <edward_hsu at realtek.com.tw>

bz 252955, 292161

---
 drivers/net/r8169.c |    9 +++++++++
 1 files changed, 9 insertions(+), 0 deletions(-)

diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c
index d9bb51b..c921ec3 100644
--- a/drivers/net/r8169.c
+++ b/drivers/net/r8169.c
@@ -2570,6 +2570,15 @@ static void rtl8169_tx_interrupt(struct net_device *dev,
 		    (TX_BUFFS_AVAIL(tp) >= MAX_SKB_FRAGS)) {
 			netif_wake_queue(dev);
 		}
+		/*
+		 * 8168 hack: TxPoll requests are lost when the Tx packets are
+		 * too close. Let's kick an extra TxPoll request when a burst
+		 * of start_xmit activity is detected (if it is not detected,
+		 * it is slow enough). -- FR
+		 */
+		smp_rmb();
+		if (tp->cur_tx != dirty_tx)
+			RTL_W8(TxPoll, NPQ);
 	}
 }
 

linux-2.6-net-sfq-fix-oops-with-2.patch:

--- NEW FILE linux-2.6-net-sfq-fix-oops-with-2.patch ---
Gitweb:     http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=5588b40d7c2bff75ee573ed42d1738c73ce24492
Commit:     5588b40d7c2bff75ee573ed42d1738c73ce24492
Parent:     1a03b81db96aeaac0276224f25c0701a1ba37318
Author:     Alexey Kuznetsov <kuznet at ms2.inr.ac.ru>
AuthorDate: Wed Sep 19 10:42:03 2007 -0700
Committer:  David S. Miller <davem at sunset.davemloft.net>
CommitDate: Thu Sep 20 12:14:08 2007 -0700

    [PKT_SCHED]: Fix 'SFQ qdisc crashes with limit of 2 packets'
    
    Acked-by: Patrick McHardy <kaber at trash.net>
    Signed-off-by: David S. Miller <davem at davemloft.net>

bz 219895

---
 net/sched/sch_sfq.c |   10 +++++-----
 1 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/net/sched/sch_sfq.c b/net/sched/sch_sfq.c
index 9579573..3a23e30 100644
--- a/net/sched/sch_sfq.c
+++ b/net/sched/sch_sfq.c
@@ -270,7 +270,7 @@ sfq_enqueue(struct sk_buff *skb, struct Qdisc* sch)
 			q->tail = x;
 		}
 	}
-	if (++sch->q.qlen < q->limit-1) {
+	if (++sch->q.qlen <= q->limit) {
 		sch->bstats.bytes += skb->len;
 		sch->bstats.packets++;
 		return 0;
@@ -306,7 +306,7 @@ sfq_requeue(struct sk_buff *skb, struct Qdisc* sch)
 			q->tail = x;
 		}
 	}
-	if (++sch->q.qlen < q->limit - 1) {
+	if (++sch->q.qlen <= q->limit) {
 		sch->qstats.requeues++;
 		return 0;
 	}
@@ -391,10 +391,10 @@ static int sfq_change(struct Qdisc *sch, struct rtattr *opt)
 	q->quantum = ctl->quantum ? : psched_mtu(sch->dev);
 	q->perturb_period = ctl->perturb_period*HZ;
 	if (ctl->limit)
-		q->limit = min_t(u32, ctl->limit, SFQ_DEPTH);
+		q->limit = min_t(u32, ctl->limit, SFQ_DEPTH - 2);
 
 	qlen = sch->q.qlen;
-	while (sch->q.qlen >= q->limit-1)
+	while (sch->q.qlen > q->limit)
 		sfq_drop(sch);
 	qdisc_tree_decrease_qlen(sch, qlen - sch->q.qlen);
 
@@ -423,7 +423,7 @@ static int sfq_init(struct Qdisc *sch, struct rtattr *opt)
 		q->dep[i+SFQ_DEPTH].next = i+SFQ_DEPTH;
 		q->dep[i+SFQ_DEPTH].prev = i+SFQ_DEPTH;
 	}
-	q->limit = SFQ_DEPTH;
+	q->limit = SFQ_DEPTH - 2;
 	q->max_depth = 0;
 	q->tail = SFQ_DEPTH;
 	if (opt == NULL) {


Index: kernel-2.6.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/kernel-2.6.spec,v
retrieving revision 1.3347
retrieving revision 1.3348
diff -u -r1.3347 -r1.3348
--- kernel-2.6.spec	26 Sep 2007 18:58:34 -0000	1.3347
+++ kernel-2.6.spec	26 Sep 2007 23:18:11 -0000	1.3348
@@ -576,6 +576,7 @@
 Patch423: linux-2.6-gfs-locking-exports.patch
 
 Patch430: linux-2.6-net-silence-noisy-printks.patch
+Patch431: linux-2.6-net-sfq-fix-oops-with-2.patch
 
 Patch440: linux-2.6-sha_alignment.patch
 Patch450: linux-2.6-input-kill-stupid-messages.patch
@@ -605,6 +606,9 @@
 Patch674: linux-2.6-libata-pata_via-cable-detect.patch
 Patch675: linux-2.6-libata-simplify-init.patch
 Patch676: linux-2.6-ppc-pegasos-via-ata-legacy-irq.patch
+Patch677: linux-2.6-libata-pata_sis-fix-dma-timing.patch
+Patch678: linux-2.6-libata-pata_sis-dma-add-missing-entry.patch
+Patch679: linux-2.6-libata-sata_sil24-fix-irq-clearing-race.patch
 
 Patch680: linux-2.6-rtl8187.patch
 Patch681: linux-2.6-wireless.patch
@@ -617,6 +621,9 @@
 Patch713: linux-2.6-net-atl1-fix-typo-in-dma-setup.patch
 Patch714: linux-2.6-net-atl1-fix-typo-in-dma_req_block.patch
 Patch715: linux-2.6-netdev-atl1-disable-broken-64-bit-dma.patch
+Patch716: linux-2.6-net-r8169-correct-phy-parameters-for-the-8110SC.patch 
+Patch717: linux-2.6-net-r8169-workaround-against-ignored-TxPoll-writes-8168.patch
+
 Patch730: linux-2.6-snd-ad1988-fix-spdif-output.patch
 Patch731: linux-2.6-snd-hda-stac92xx-fixes.patch
 Patch740: linux-2.6-sdhci-ene-controller-quirk.patch
@@ -628,6 +635,9 @@
 Patch781: linux-2.6-usb-allow-1-byte-replies.patch
 Patch782: linux-2.6-usb-fixup-interval-lengths.patch
 
+Patch790: linux-2.6-acpi-disable-cstates-in-suspend.patch
+Patch791: linux-2.6-acpi-kill-dmesg-spam.patch
+
 Patch800: linux-2.6-wakeups-hdaps.patch
 Patch801: linux-2.6-wakeups.patch
 Patch900: linux-2.6-sched-cfs-v2.6.22.5-v20.5.patch
@@ -1262,6 +1272,8 @@
 # Networking
 # Disable easy to trigger printk's.
 ApplyPatch linux-2.6-net-silence-noisy-printks.patch
+# fix oops in sfq
+ApplyPatch linux-2.6-net-sfq-fix-oops-with-2.patch
 
 # Misc fixes
 # Fix SHA1 alignment problem on ia64
@@ -1324,6 +1336,11 @@
 # fix Pegasos libata glitches
 ApplyPatch linux-2.6-libata-simplify-init.patch
 ApplyPatch linux-2.6-ppc-pegasos-via-ata-legacy-irq.patch
+# pata_sis DMA fixes
+ApplyPatch linux-2.6-libata-pata_sis-fix-dma-timing.patch
+ApplyPatch linux-2.6-libata-pata_sis-dma-add-missing-entry.patch
+# sata_sil24 irq race fix
+ApplyPatch linux-2.6-libata-sata_sil24-fix-irq-clearing-race.patch
 
 # Add the rtl8187 driver from upstream
 ApplyPatch linux-2.6-rtl8187.patch
@@ -1349,6 +1366,10 @@
 ApplyPatch linux-2.6-net-atl1-fix-typo-in-dma_req_block.patch
 ApplyPatch linux-2.6-netdev-atl1-disable-broken-64-bit-dma.patch
 
+# r8169
+ApplyPatch linux-2.6-net-r8169-correct-phy-parameters-for-the-8110SC.patch
+ApplyPatch linux-2.6-net-r8169-workaround-against-ignored-TxPoll-writes-8168.patch
+
 # ALSA
 #
 # fix spdif output on ad1988
@@ -1377,6 +1398,10 @@
 ApplyPatch linux-2.6-usb-fixup-interval-lengths.patch
 
 # ACPI patches
+# fix some suspend bugssuspend
+ApplyPatch linux-2.6-acpi-disable-cstates-in-suspend.patch
+# silence noisy message
+ApplyPatch linux-2.6-acpi-kill-dmesg-spam.patch
 
 # Fix excessive wakeups
 # Make hdaps timer only tick when in use.
@@ -2331,6 +2356,14 @@
 
 %changelog
 * Wed Sep 26 2007 Chuck Ebbert <cebbert at redhat.com>
+- libata pata_sis: DMA fixes (#202291)
+- libata sata_sil24: IRQ clearing race fixes
+- net driver r8169: fix hanging (#252955, #292161)
+- qdisc sfq: fix oops with 2 packet queue (#219895)
+- ACPI: disable processor C-states suring suspend
+- ACPI: silence noisy message
+
+* Wed Sep 26 2007 Chuck Ebbert <cebbert at redhat.com>
 - Linux 2.6.22.9
 
 * Wed Sep 26 2007 Chuck Ebbert <cebbert at redhat.com>




More information about the fedora-extras-commits mailing list