From: Greg Kroah-Hartman Date: Tue, 13 Dec 2005 07:30:26 +0000 (-0800) Subject: more patches queued X-Git-Tag: v2.6.14.4~7 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3dc58ab2b8ac4f4e1eff419fa1bb459c204413c3;p=thirdparty%2Fkernel%2Fstable-queue.git more patches queued --- diff --git a/queue/bonding-fix-feature-consolidation.patch b/queue/bonding-fix-feature-consolidation.patch new file mode 100644 index 00000000000..9f5c35dd62e --- /dev/null +++ b/queue/bonding-fix-feature-consolidation.patch @@ -0,0 +1,111 @@ +From stable-bounces@linux.kernel.org Mon Dec 12 12:26:42 2005 +Date: Wed, 9 Nov 2005 10:02:38 -0800 +Message-Id: <200511091802.jA9I2csb003326@hera.kernel.org> +From: Linux Kernel Mailing List +To: git-commits-head@vger.kernel.org +Cc: +Subject: bonding: fix feature consolidation + +From: Jay Vosburgh + +[PATCH] bonding: fix feature consolidation + +This should resolve http://bugzilla.kernel.org/show_bug.cgi?id=5519 + +The current feature computation loses bits that it doesn't know about, +resulting in an inability to add VLANs and possibly other havoc. +Rewrote function to preserve bits it doesn't know about, remove an +unneeded state variable, and simplify the code. + +Signed-off-by: Jay Vosburgh +Signed-off-by: John W. Linville +Signed-off-by: Greg Kroah-Hartman + +diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c +index 8032126..94cec3c 100644 +--- + drivers/net/bonding/bond_main.c | 32 +++++++++++--------------------- + drivers/net/bonding/bonding.h | 7 ++----- + 2 files changed, 13 insertions(+), 26 deletions(-) + +--- linux-2.6.14.3.orig/drivers/net/bonding/bond_main.c ++++ linux-2.6.14.3/drivers/net/bonding/bond_main.c +@@ -1604,35 +1604,27 @@ static int bond_sethwaddr(struct net_dev + (NETIF_F_SG|NETIF_F_IP_CSUM|NETIF_F_NO_CSUM|NETIF_F_HW_CSUM) + + /* +- * Compute the features available to the bonding device by +- * intersection of all of the slave devices' BOND_INTERSECT_FEATURES. +- * Call this after attaching or detaching a slave to update the +- * bond's features. ++ * Compute the common dev->feature set available to all slaves. Some ++ * feature bits are managed elsewhere, so preserve feature bits set on ++ * master device that are not part of the examined set. + */ + static int bond_compute_features(struct bonding *bond) + { +- int i; ++ unsigned long features = BOND_INTERSECT_FEATURES; + struct slave *slave; + struct net_device *bond_dev = bond->dev; +- int features = bond->bond_features; ++ int i; + +- bond_for_each_slave(bond, slave, i) { +- struct net_device * slave_dev = slave->dev; +- if (i == 0) { +- features |= BOND_INTERSECT_FEATURES; +- } +- features &= +- ~(~slave_dev->features & BOND_INTERSECT_FEATURES); +- } ++ bond_for_each_slave(bond, slave, i) ++ features &= (slave->dev->features & BOND_INTERSECT_FEATURES); + +- /* turn off NETIF_F_SG if we need a csum and h/w can't do it */ + if ((features & NETIF_F_SG) && +- !(features & (NETIF_F_IP_CSUM | +- NETIF_F_NO_CSUM | +- NETIF_F_HW_CSUM))) { ++ !(features & (NETIF_F_IP_CSUM | ++ NETIF_F_NO_CSUM | ++ NETIF_F_HW_CSUM))) + features &= ~NETIF_F_SG; +- } + ++ features |= (bond_dev->features & ~BOND_INTERSECT_FEATURES); + bond_dev->features = features; + + return 0; +@@ -4508,8 +4500,6 @@ static int __init bond_init(struct net_d + NETIF_F_HW_VLAN_RX | + NETIF_F_HW_VLAN_FILTER); + +- bond->bond_features = bond_dev->features; +- + #ifdef CONFIG_PROC_FS + bond_create_proc_entry(bond); + #endif +--- linux-2.6.14.3.orig/drivers/net/bonding/bonding.h ++++ linux-2.6.14.3/drivers/net/bonding/bonding.h +@@ -40,8 +40,8 @@ + #include "bond_3ad.h" + #include "bond_alb.h" + +-#define DRV_VERSION "2.6.4" +-#define DRV_RELDATE "September 26, 2005" ++#define DRV_VERSION "2.6.5" ++#define DRV_RELDATE "November 4, 2005" + #define DRV_NAME "bonding" + #define DRV_DESCRIPTION "Ethernet Channel Bonding Driver" + +@@ -211,9 +211,6 @@ struct bonding { + struct bond_params params; + struct list_head vlan_list; + struct vlan_group *vlgrp; +- /* the features the bonding device supports, independently +- * of any slaves */ +- int bond_features; + }; + + /** diff --git a/queue/fix-serverworks-tlb-flush..patch b/queue/fix-serverworks-tlb-flush..patch new file mode 100644 index 00000000000..514b258b507 --- /dev/null +++ b/queue/fix-serverworks-tlb-flush..patch @@ -0,0 +1,59 @@ +From stable-bounces@linux.kernel.org Mon Dec 12 12:32:30 2005 +Date: Mon, 7 Nov 2005 14:02:58 -0800 +Message-Id: <200511072202.jA7M2wXl001471@hera.kernel.org> +From: Linux Kernel Mailing List +To: git-commits-head@vger.kernel.org +Cc: +Subject: [stable] [AGPGART] Fix serverworks TLB flush. + +From: Dave Jones + +[AGPGART] Fix serverworks TLB flush. +Go back to what 2.4 kernels used to do here, as if this hits, +the kernel just hangs indefinitly. + +Actually an improvement over 2.4 - we now break; out of the loop +instead of just printing messages on timeouts. + +Signed-off-by: Dave Jones +Signed-off-by: Greg Kroah-Hartman + + +diff --git a/drivers/char/agp/sworks-agp.c b/drivers/char/agp/sworks-agp.c +index a9fb12c..5396897 100644 +--- + drivers/char/agp/sworks-agp.c | 18 ++++++++++++++++-- + 1 file changed, 16 insertions(+), 2 deletions(-) + +--- linux-2.6.14.3.orig/drivers/char/agp/sworks-agp.c ++++ linux-2.6.14.3/drivers/char/agp/sworks-agp.c +@@ -242,13 +242,27 @@ static int serverworks_fetch_size(void) + */ + static void serverworks_tlbflush(struct agp_memory *temp) + { ++ unsigned long timeout; ++ + writeb(1, serverworks_private.registers+SVWRKS_POSTFLUSH); +- while (readb(serverworks_private.registers+SVWRKS_POSTFLUSH) == 1) ++ timeout = jiffies + 3*HZ; ++ while (readb(serverworks_private.registers+SVWRKS_POSTFLUSH) == 1) { + cpu_relax(); ++ if (time_after(jiffies, timeout)) { ++ printk(KERN_ERR PFX "TLB post flush took more than 3 seconds\n"); ++ break; ++ } ++ } + + writel(1, serverworks_private.registers+SVWRKS_DIRFLUSH); +- while(readl(serverworks_private.registers+SVWRKS_DIRFLUSH) == 1) ++ timeout = jiffies + 3*HZ; ++ while (readl(serverworks_private.registers+SVWRKS_DIRFLUSH) == 1) { + cpu_relax(); ++ if (time_after(jiffies, timeout)) { ++ printk(KERN_ERR PFX "TLB Dir flush took more than 3 seconds\n"); ++ break; ++ } ++ } + } + + static int serverworks_configure(void) diff --git a/queue/i8k-fix-proc-reporting-of-blank-service-tags.patch b/queue/i8k-fix-proc-reporting-of-blank-service-tags.patch new file mode 100644 index 00000000000..e4fe3e8ecca --- /dev/null +++ b/queue/i8k-fix-proc-reporting-of-blank-service-tags.patch @@ -0,0 +1,46 @@ +From stable-bounces@linux.kernel.org Mon Dec 12 12:32:39 2005 +Date: Sat, 12 Nov 2005 11:59:25 -0800 +Message-Id: <200511121959.jACJxPZh004172@hera.kernel.org> +From: Linux Kernel Mailing List +To: git-commits-head@vger.kernel.org +Cc: +Subject: I8K: fix /proc reporting of blank service tags + +From: Dmitry Torokhov + +[PATCH] I8K: fix /proc reporting of blank service tags + +Make /proc/i8k display '?' when service tag is blank in BIOS. +This fixes segfault in i8k gkrellm plugin. + +Signed-off-by: Dmitry Torokhov +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + + +--- + drivers/char/i8k.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +--- linux-2.6.14.3.orig/drivers/char/i8k.c ++++ linux-2.6.14.3/drivers/char/i8k.c +@@ -99,7 +99,9 @@ struct smm_regs { + + static inline char *i8k_get_dmi_data(int field) + { +- return dmi_get_system_info(field) ? : "N/A"; ++ char *dmi_data = dmi_get_system_info(field); ++ ++ return dmi_data && *dmi_data ? dmi_data : "?"; + } + + /* +@@ -396,7 +398,7 @@ static int i8k_proc_show(struct seq_file + return seq_printf(seq, "%s %s %s %d %d %d %d %d %d %d\n", + I8K_PROC_FMT, + bios_version, +- dmi_get_system_info(DMI_PRODUCT_SERIAL) ? : "N/A", ++ i8k_get_dmi_data(DMI_PRODUCT_SERIAL), + cpu_temp, + left_fan, right_fan, left_speed, right_speed, + ac_power, fn_key); diff --git a/queue/locking-rewrite.patch b/queue/locking-rewrite.patch new file mode 100644 index 00000000000..8cb95638fa8 --- /dev/null +++ b/queue/locking-rewrite.patch @@ -0,0 +1,74 @@ +From stable-bounces@linux.kernel.org Mon Dec 12 12:27:15 2005 +Date: Mon, 31 Oct 2005 09:05:36 -0800 +Message-Id: <200510311705.j9VH5aDM031690@hera.kernel.org> +From: Linux Kernel Mailing List +To: git-commits-head@vger.kernel.org +Cc: +Subject: [libata] locking rewrite (== fix) + +From: Jeff Garzik + +[libata] locking rewrite (== fix) + +A lot of power packed into a little patch. + +This change eliminates the sharing between our controller-wide spinlock +and the SCSI core's Scsi_Host lock. As the locking in libata was +already highly compartmentalized, always referencing our own lock, and +never scsi_host::host_lock. + +As a side effect, this change eliminates a deadlock from calling +scsi_finish_command() while inside our spinlock. + + +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/scsi/libata-core.c | 2 -- + drivers/scsi/libata-scsi.c | 9 ++++++++- + 2 files changed, 8 insertions(+), 3 deletions(-) + +--- linux-2.6.14.3.orig/drivers/scsi/libata-core.c ++++ linux-2.6.14.3/drivers/scsi/libata-core.c +@@ -3916,8 +3916,6 @@ static void ata_host_init(struct ata_por + host->unique_id = ata_unique_id++; + host->max_cmd_len = 12; + +- scsi_assign_lock(host, &host_set->lock); +- + ap->flags = ATA_FLAG_PORT_DISABLED; + ap->id = host->unique_id; + ap->host = host; +--- linux-2.6.14.3.orig/drivers/scsi/libata-scsi.c ++++ linux-2.6.14.3/drivers/scsi/libata-scsi.c +@@ -39,6 +39,7 @@ + #include + #include "scsi.h" + #include ++#include + #include + #include + +@@ -1565,8 +1566,12 @@ int ata_scsi_queuecmd(struct scsi_cmnd * + struct ata_port *ap; + struct ata_device *dev; + struct scsi_device *scsidev = cmd->device; ++ struct Scsi_Host *shost = scsidev->host; + +- ap = (struct ata_port *) &scsidev->host->hostdata[0]; ++ ap = (struct ata_port *) &shost->hostdata[0]; ++ ++ spin_unlock(shost->host_lock); ++ spin_lock(&ap->host_set->lock); + + ata_scsi_dump_cdb(ap, cmd); + +@@ -1589,6 +1594,8 @@ int ata_scsi_queuecmd(struct scsi_cmnd * + ata_scsi_translate(ap, dev, cmd, done, atapi_xlat); + + out_unlock: ++ spin_unlock(&ap->host_set->lock); ++ spin_lock(shost->host_lock); + return 0; + } + diff --git a/queue/recompute-features-when-adding-a-new-device.patch b/queue/recompute-features-when-adding-a-new-device.patch new file mode 100644 index 00000000000..e7768c0ad81 --- /dev/null +++ b/queue/recompute-features-when-adding-a-new-device.patch @@ -0,0 +1,35 @@ +From stable-bounces@linux.kernel.org Mon Dec 12 12:27:13 2005 +Date: Thu, 24 Nov 2005 00:00:03 -0800 +Message-Id: <200511240800.jAO803jw027240@hera.kernel.org> +From: Linux Kernel Mailing List +To: git-commits-head@vger.kernel.org +Cc: +Subject: [BRIDGE]: recompute features when adding a new device + +From: Olaf Rempel + +[BRIDGE]: recompute features when adding a new device + +We must recompute bridge features everytime the list of underlying +devices changes, or we might end up with features that are not supported +by all devices (eg. NETIF_F_TSO) +This patch adds the missing recompute when adding a device to the bridge. + +Signed-off-by: Olaf Rempel +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + net/bridge/br_if.c | 1 + + 1 file changed, 1 insertion(+) + +--- linux-2.6.14.3.orig/net/bridge/br_if.c ++++ linux-2.6.14.3/net/bridge/br_if.c +@@ -366,6 +366,7 @@ int br_add_if(struct net_bridge *br, str + + spin_lock_bh(&br->lock); + br_stp_recalculate_bridge_id(br); ++ br_features_recompute(br); + if ((br->dev->flags & IFF_UP) + && (dev->flags & IFF_UP) && netif_carrier_ok(dev)) + br_stp_enable_port(p); diff --git a/queue/series b/queue/series index 875db6b32c5..494c9892a04 100644 --- a/queue/series +++ b/queue/series @@ -15,3 +15,8 @@ v4l-dvb-fix-tuner-init-for-pinnacle-pctv-stereo.patch v4l-dvb-fix-analog-ntsc-for-thomson-dtt-761x-hybrid-tuner.patch nm256-reset-workaround-for-latitude-csx.patch i82365-release-all-resources-if-no-devices-are-found.patch +fix-serverworks-tlb-flush..patch +bonding-fix-feature-consolidation.patch +recompute-features-when-adding-a-new-device.patch +locking-rewrite.patch +i8k-fix-proc-reporting-of-blank-service-tags.patch