]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.0 patches
authorGreg Kroah-Hartman <gregkh@suse.de>
Wed, 28 Sep 2011 20:09:24 +0000 (13:09 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Wed, 28 Sep 2011 20:09:24 +0000 (13:09 -0700)
15 files changed:
queue-3.0/3w-9xxx-fix-iommu_iova-leak.patch [new file with mode: 0644]
queue-3.0/aacraid-reset-should-disable-msi-interrupt.patch [new file with mode: 0644]
queue-3.0/ath9k_hw-fix-rx-dma-stuck-for-ar9003-chips.patch [new file with mode: 0644]
queue-3.0/block-free-queue-resources-at-blk_release_queue.patch [new file with mode: 0644]
queue-3.0/bnx2x-add-missing-break-in-bnx2x_dcbnl_get_cap.patch [new file with mode: 0644]
queue-3.0/bnx2x-fix-hw-attention-handling.patch [new file with mode: 0644]
queue-3.0/cfg80211-fix-validation-of-akm-suites.patch [new file with mode: 0644]
queue-3.0/cxgb3i-convert-cdev-l2opt-to-use-rcu-to-prevent-null-dereference.patch [new file with mode: 0644]
queue-3.0/iwlagn-fix-dangling-scan-request.patch [new file with mode: 0644]
queue-3.0/iwlegacy-do-not-use-interruptible-waits.patch [new file with mode: 0644]
queue-3.0/iwlegacy-fix-command-queue-timeout.patch [new file with mode: 0644]
queue-3.0/libsas-fix-failure-to-revalidate-domain-for-anything-but-the-first-expander-child.patch [new file with mode: 0644]
queue-3.0/rtlwifi-rtl8192cu-fix-unitialized-struct.patch [new file with mode: 0644]
queue-3.0/scsi-qla4xxx-needs-libiscsi.o.patch [new file with mode: 0644]
queue-3.0/series

diff --git a/queue-3.0/3w-9xxx-fix-iommu_iova-leak.patch b/queue-3.0/3w-9xxx-fix-iommu_iova-leak.patch
new file mode 100644 (file)
index 0000000..cca5611
--- /dev/null
@@ -0,0 +1,40 @@
+From 96067723e46b0dd24ae7b934085ab4eff4d26a1b Mon Sep 17 00:00:00 2001
+From: James Bottomley <JBottomley@Parallels.com>
+Date: Sun, 18 Sep 2011 18:56:20 +0400
+Subject: [SCSI] 3w-9xxx: fix iommu_iova leak
+
+From: James Bottomley <JBottomley@Parallels.com>
+
+commit 96067723e46b0dd24ae7b934085ab4eff4d26a1b upstream.
+
+Following reports on the list, it looks like the 3e-9xxx driver will leak dma
+mappings every time we get a transient queueing error back from the card.
+This is because it maps the sg list in the routine that sends the command, but
+doesn't unmap again in the transient failure path (even though the command is
+sent back to the block layer).  Fix by unmapping before returning the status.
+
+Reported-by: Chris Boot <bootc@bootc.net>
+Tested-by: Chris Boot <bootc@bootc.net>
+Acked-by: Adam Radford <aradford@gmail.com>
+Signed-off-by: James Bottomley <JBottomley@Parallels.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/scsi/3w-9xxx.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/drivers/scsi/3w-9xxx.c
++++ b/drivers/scsi/3w-9xxx.c
+@@ -1800,10 +1800,12 @@ static int twa_scsi_queue_lck(struct scs
+       switch (retval) {
+       case SCSI_MLQUEUE_HOST_BUSY:
+               twa_free_request_id(tw_dev, request_id);
++              twa_unmap_scsi_data(tw_dev, request_id);
+               break;
+       case 1:
+               tw_dev->state[request_id] = TW_S_COMPLETED;
+               twa_free_request_id(tw_dev, request_id);
++              twa_unmap_scsi_data(tw_dev, request_id);
+               SCpnt->result = (DID_ERROR << 16);
+               done(SCpnt);
+               retval = 0;
diff --git a/queue-3.0/aacraid-reset-should-disable-msi-interrupt.patch b/queue-3.0/aacraid-reset-should-disable-msi-interrupt.patch
new file mode 100644 (file)
index 0000000..42ddb83
--- /dev/null
@@ -0,0 +1,37 @@
+From d0efab26f89506387a1bde898556660e06d7eb15 Mon Sep 17 00:00:00 2001
+From: Vasily Averin <vvs@parallels.com>
+Date: Fri, 2 Sep 2011 19:31:46 +0400
+Subject: [SCSI] aacraid: reset should disable MSI interrupt
+
+From: Vasily Averin <vvs@parallels.com>
+
+commit d0efab26f89506387a1bde898556660e06d7eb15 upstream.
+
+scsi reset on hardware with enabled MSI interrupts generates WARNING message
+
+[11027.798722] aacraid: Host adapter abort request (0,0,0,0)
+[11027.798814] aacraid: Host adapter reset request. SCSI hang ?
+[11087.762237] aacraid: SCSI bus appears hung
+[11135.082543] ------------[ cut here ]------------
+[11135.082646] WARNING: at drivers/pci/msi.c:658 pci_enable_msi_block+0x251/0x290()
+
+Signed-off-by: Vasily Averin <vvs@sw.ru>
+Acked-by: Mark Salyzyn <mark_salyzyn@us.xyratex.com>
+Signed-off-by: James Bottomley <JBottomley@Parallels.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/scsi/aacraid/commsup.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/drivers/scsi/aacraid/commsup.c
++++ b/drivers/scsi/aacraid/commsup.c
+@@ -1283,6 +1283,8 @@ static int _aac_reset_adapter(struct aac
+       kfree(aac->queues);
+       aac->queues = NULL;
+       free_irq(aac->pdev->irq, aac);
++      if (aac->msi)
++              pci_disable_msi(aac->pdev);
+       kfree(aac->fsa_dev);
+       aac->fsa_dev = NULL;
+       quirks = aac_get_driver_ident(index)->quirks;
diff --git a/queue-3.0/ath9k_hw-fix-rx-dma-stuck-for-ar9003-chips.patch b/queue-3.0/ath9k_hw-fix-rx-dma-stuck-for-ar9003-chips.patch
new file mode 100644 (file)
index 0000000..8cdbc9b
--- /dev/null
@@ -0,0 +1,33 @@
+From e9f9530bb697f53dd620df290102359a3325bb23 Mon Sep 17 00:00:00 2001
+From: Rajkumar Manoharan <rmanohar@qca.qualcomm.com>
+Date: Tue, 20 Sep 2011 16:23:51 +0530
+Subject: ath9k_hw: Fix Rx DMA stuck for AR9003 chips
+
+From: Rajkumar Manoharan <rmanohar@qca.qualcomm.com>
+
+commit e9f9530bb697f53dd620df290102359a3325bb23 upstream.
+
+During the endurance testing, rx frames are not getting DMAd from
+MAC whereas pcu rx frame counters are getting updated properly.
+As per systems team input updated the initval to fix rx dma stuck
+issue.
+
+Signed-off-by: Rajkumar Manoharan <rmanohar@qca.qualcomm.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h
++++ b/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h
+@@ -1516,7 +1516,7 @@ static const u32 ar9300_2p2_mac_core[][2
+       {0x00008258, 0x00000000},
+       {0x0000825c, 0x40000000},
+       {0x00008260, 0x00080922},
+-      {0x00008264, 0x9bc00010},
++      {0x00008264, 0x9d400010},
+       {0x00008268, 0xffffffff},
+       {0x0000826c, 0x0000ffff},
+       {0x00008270, 0x00000000},
diff --git a/queue-3.0/block-free-queue-resources-at-blk_release_queue.patch b/queue-3.0/block-free-queue-resources-at-blk_release_queue.patch
new file mode 100644 (file)
index 0000000..7fcd11a
--- /dev/null
@@ -0,0 +1,70 @@
+From 777eb1bf15b8532c396821774bf6451e563438f5 Mon Sep 17 00:00:00 2001
+From: Hannes Reinecke <hare@suse.de>
+Date: Wed, 28 Sep 2011 08:07:01 -0600
+Subject: block: Free queue resources at blk_release_queue()
+
+From: Hannes Reinecke <hare@suse.de>
+
+commit 777eb1bf15b8532c396821774bf6451e563438f5 upstream.
+
+A kernel crash is observed when a mounted ext3/ext4 filesystem is
+physically removed. The problem is that blk_cleanup_queue() frees up
+some resources eg by calling elevator_exit(), which are not checked for
+in normal operation. So we should rather move these calls to the
+destructor function blk_release_queue() as at that point all remaining
+references are gone. However, in doing so we have to ensure that any
+externally supplied queue_lock is disconnected as the driver might free
+up the lock after the call of blk_cleanup_queue(),
+
+Signed-off-by: Hannes Reinecke <hare@suse.de>
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ block/blk-core.c  |   13 ++++++-------
+ block/blk-sysfs.c |    5 +++++
+ 2 files changed, 11 insertions(+), 7 deletions(-)
+
+--- a/block/blk-core.c
++++ b/block/blk-core.c
+@@ -348,9 +348,10 @@ void blk_put_queue(struct request_queue
+ EXPORT_SYMBOL(blk_put_queue);
+ /*
+- * Note: If a driver supplied the queue lock, it should not zap that lock
+- * unexpectedly as some queue cleanup components like elevator_exit() and
+- * blk_throtl_exit() need queue lock.
++ * Note: If a driver supplied the queue lock, it is disconnected
++ * by this function. The actual state of the lock doesn't matter
++ * here as the request_queue isn't accessible after this point
++ * (QUEUE_FLAG_DEAD is set) and no other requests will be queued.
+  */
+ void blk_cleanup_queue(struct request_queue *q)
+ {
+@@ -367,10 +368,8 @@ void blk_cleanup_queue(struct request_qu
+       queue_flag_set_unlocked(QUEUE_FLAG_DEAD, q);
+       mutex_unlock(&q->sysfs_lock);
+-      if (q->elevator)
+-              elevator_exit(q->elevator);
+-
+-      blk_throtl_exit(q);
++      if (q->queue_lock != &q->__queue_lock)
++              q->queue_lock = &q->__queue_lock;
+       blk_put_queue(q);
+ }
+--- a/block/blk-sysfs.c
++++ b/block/blk-sysfs.c
+@@ -472,6 +472,11 @@ static void blk_release_queue(struct kob
+       blk_sync_queue(q);
++      if (q->elevator)
++              elevator_exit(q->elevator);
++
++      blk_throtl_exit(q);
++
+       if (rl->rq_pool)
+               mempool_destroy(rl->rq_pool);
diff --git a/queue-3.0/bnx2x-add-missing-break-in-bnx2x_dcbnl_get_cap.patch b/queue-3.0/bnx2x-add-missing-break-in-bnx2x_dcbnl_get_cap.patch
new file mode 100644 (file)
index 0000000..da64008
--- /dev/null
@@ -0,0 +1,28 @@
+From a0babc80eb375aad69dab4687c3b44c47d42f241 Mon Sep 17 00:00:00 2001
+From: Shmulik Ravid <shmulikr@broadcom.com>
+Date: Thu, 22 Sep 2011 02:33:33 +0000
+Subject: bnx2x: add missing break in bnx2x_dcbnl_get_cap
+
+From: Shmulik Ravid <shmulikr@broadcom.com>
+
+commit a0babc80eb375aad69dab4687c3b44c47d42f241 upstream.
+
+Signed-off-by: Dmitry Kravkov <dmitry@broadcom.com>
+Signed-off-by: Eilon Greenstein <eilong@broadcom.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/bnx2x/bnx2x_dcb.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/net/bnx2x/bnx2x_dcb.c
++++ b/drivers/net/bnx2x/bnx2x_dcb.c
+@@ -1858,6 +1858,7 @@ static u8 bnx2x_dcbnl_get_cap(struct net
+                       break;
+               case DCB_CAP_ATTR_DCBX:
+                       *cap = BNX2X_DCBX_CAPS;
++                      break;
+               default:
+                       rval = -EINVAL;
+                       break;
diff --git a/queue-3.0/bnx2x-fix-hw-attention-handling.patch b/queue-3.0/bnx2x-fix-hw-attention-handling.patch
new file mode 100644 (file)
index 0000000..ba58efb
--- /dev/null
@@ -0,0 +1,71 @@
+From f2eaeb58bf6995a979c413ea0cc73289533feacb Mon Sep 17 00:00:00 2001
+From: Dmitry Kravkov <dmitry@broadcom.com>
+Date: Thu, 22 Sep 2011 02:33:31 +0000
+Subject: bnx2x: fix hw attention handling
+
+From: Dmitry Kravkov <dmitry@broadcom.com>
+
+commit f2eaeb58bf6995a979c413ea0cc73289533feacb upstream.
+
+Use register name to initialize attention mask
+
+Signed-off-by: Dmitry Kravkov <dmitry@broadcom.com>
+Signed-off-by: Eilon Greenstein <eilong@broadcom.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/bnx2x/bnx2x_main.c |    6 ++++--
+ drivers/net/bnx2x/bnx2x_reg.h  |   12 ++++++++++++
+ 2 files changed, 16 insertions(+), 2 deletions(-)
+
+--- a/drivers/net/bnx2x/bnx2x_main.c
++++ b/drivers/net/bnx2x/bnx2x_main.c
+@@ -4138,7 +4138,7 @@ static void bnx2x_init_def_sb(struct bnx
+       int igu_seg_id;
+       int port = BP_PORT(bp);
+       int func = BP_FUNC(bp);
+-      int reg_offset;
++      int reg_offset, reg_offset_en5;
+       u64 section;
+       int index;
+       struct hc_sp_status_block_data sp_sb_data;
+@@ -4161,6 +4161,8 @@ static void bnx2x_init_def_sb(struct bnx
+       reg_offset = (port ? MISC_REG_AEU_ENABLE1_FUNC_1_OUT_0 :
+                            MISC_REG_AEU_ENABLE1_FUNC_0_OUT_0);
++      reg_offset_en5 = (port ? MISC_REG_AEU_ENABLE5_FUNC_1_OUT_0 :
++                               MISC_REG_AEU_ENABLE5_FUNC_0_OUT_0);
+       for (index = 0; index < MAX_DYNAMIC_ATTN_GRPS; index++) {
+               int sindex;
+               /* take care of sig[0]..sig[4] */
+@@ -4175,7 +4177,7 @@ static void bnx2x_init_def_sb(struct bnx
+                        * and not 16 between the different groups
+                        */
+                       bp->attn_group[index].sig[4] = REG_RD(bp,
+-                                      reg_offset + 0x10 + 0x4*index);
++                                      reg_offset_en5 + 0x4*index);
+               else
+                       bp->attn_group[index].sig[4] = 0;
+       }
+--- a/drivers/net/bnx2x/bnx2x_reg.h
++++ b/drivers/net/bnx2x/bnx2x_reg.h
+@@ -1325,6 +1325,18 @@
+    Latched ump_tx_parity; [31] MCP Latched scpad_parity; */
+ #define MISC_REG_AEU_ENABLE4_PXP_0                             0xa108
+ #define MISC_REG_AEU_ENABLE4_PXP_1                             0xa1a8
++/* [RW 32] fifth 32b for enabling the output for function 0 output0. Mapped
++ * as follows: [0] PGLUE config_space; [1] PGLUE misc_flr; [2] PGLUE B RBC
++ * attention [3] PGLUE B RBC parity; [4] ATC attention; [5] ATC parity; [6]
++ * mstat0 attention; [7] mstat0 parity; [8] mstat1 attention; [9] mstat1
++ * parity; [31-10] Reserved; */
++#define MISC_REG_AEU_ENABLE5_FUNC_0_OUT_0                      0xa688
++/* [RW 32] Fifth 32b for enabling the output for function 1 output0. Mapped
++ * as follows: [0] PGLUE config_space; [1] PGLUE misc_flr; [2] PGLUE B RBC
++ * attention [3] PGLUE B RBC parity; [4] ATC attention; [5] ATC parity; [6]
++ * mstat0 attention; [7] mstat0 parity; [8] mstat1 attention; [9] mstat1
++ * parity; [31-10] Reserved; */
++#define MISC_REG_AEU_ENABLE5_FUNC_1_OUT_0                      0xa6b0
+ /* [RW 1] set/clr general attention 0; this will set/clr bit 94 in the aeu
+    128 bit vector */
+ #define MISC_REG_AEU_GENERAL_ATTN_0                            0xa000
diff --git a/queue-3.0/cfg80211-fix-validation-of-akm-suites.patch b/queue-3.0/cfg80211-fix-validation-of-akm-suites.patch
new file mode 100644 (file)
index 0000000..9a4ebe6
--- /dev/null
@@ -0,0 +1,43 @@
+From 1b9ca0272ffae212e726380f66777b30a56ed7a5 Mon Sep 17 00:00:00 2001
+From: Jouni Malinen <jouni@qca.qualcomm.com>
+Date: Wed, 21 Sep 2011 16:13:07 +0300
+Subject: cfg80211: Fix validation of AKM suites
+
+From: Jouni Malinen <jouni@qca.qualcomm.com>
+
+commit 1b9ca0272ffae212e726380f66777b30a56ed7a5 upstream.
+
+Incorrect variable was used in validating the akm_suites array from
+NL80211_ATTR_AKM_SUITES. In addition, there was no explicit
+validation of the array length (we only have room for
+NL80211_MAX_NR_AKM_SUITES).
+
+This can result in a buffer write overflow for stack variables with
+arbitrary data from user space. The nl80211 commands using the affected
+functionality require GENL_ADMIN_PERM, so this is only exposed to admin
+users.
+
+Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/wireless/nl80211.c |    5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+--- a/net/wireless/nl80211.c
++++ b/net/wireless/nl80211.c
+@@ -4044,9 +4044,12 @@ static int nl80211_crypto_settings(struc
+               if (len % sizeof(u32))
+                       return -EINVAL;
++              if (settings->n_akm_suites > NL80211_MAX_NR_AKM_SUITES)
++                      return -EINVAL;
++
+               memcpy(settings->akm_suites, data, len);
+-              for (i = 0; i < settings->n_ciphers_pairwise; i++)
++              for (i = 0; i < settings->n_akm_suites; i++)
+                       if (!nl80211_valid_akm_suite(settings->akm_suites[i]))
+                               return -EINVAL;
+       }
diff --git a/queue-3.0/cxgb3i-convert-cdev-l2opt-to-use-rcu-to-prevent-null-dereference.patch b/queue-3.0/cxgb3i-convert-cdev-l2opt-to-use-rcu-to-prevent-null-dereference.patch
new file mode 100644 (file)
index 0000000..7c12722
--- /dev/null
@@ -0,0 +1,247 @@
+From e48f129c2f200dde8899f6ea5c6e7173674fc482 Mon Sep 17 00:00:00 2001
+From: Neil Horman <nhorman@tuxdriver.com>
+Date: Tue, 6 Sep 2011 13:59:13 -0400
+Subject: [SCSI] cxgb3i: convert cdev->l2opt to use rcu to prevent NULL dereference
+
+From: Neil Horman <nhorman@tuxdriver.com>
+
+commit e48f129c2f200dde8899f6ea5c6e7173674fc482 upstream.
+
+This oops was reported recently:
+d:mon> e
+cpu 0xd: Vector: 300 (Data Access) at [c0000000fd4c7120]
+    pc: d00000000076f194: .t3_l2t_get+0x44/0x524 [cxgb3]
+    lr: d000000000b02108: .init_act_open+0x150/0x3d4 [cxgb3i]
+    sp: c0000000fd4c73a0
+   msr: 8000000000009032
+   dar: 0
+ dsisr: 40000000
+  current = 0xc0000000fd640d40
+  paca    = 0xc00000000054ff80
+    pid   = 5085, comm = iscsid
+d:mon> t
+[c0000000fd4c7450] d000000000b02108 .init_act_open+0x150/0x3d4 [cxgb3i]
+[c0000000fd4c7500] d000000000e45378 .cxgbi_ep_connect+0x784/0x8e8 [libcxgbi]
+[c0000000fd4c7650] d000000000db33f0 .iscsi_if_rx+0x71c/0xb18
+[scsi_transport_iscsi2]
+[c0000000fd4c7740] c000000000370c9c .netlink_data_ready+0x40/0xa4
+[c0000000fd4c77c0] c00000000036f010 .netlink_sendskb+0x4c/0x9c
+[c0000000fd4c7850] c000000000370c18 .netlink_sendmsg+0x358/0x39c
+[c0000000fd4c7950] c00000000033be24 .sock_sendmsg+0x114/0x1b8
+[c0000000fd4c7b50] c00000000033d208 .sys_sendmsg+0x218/0x2ac
+[c0000000fd4c7d70] c00000000033f55c .sys_socketcall+0x228/0x27c
+[c0000000fd4c7e30] c0000000000086a4 syscall_exit+0x0/0x40
+---
+ drivers/infiniband/hw/cxgb3/iwch_cm.c |   10 +++++-----
+ drivers/net/cxgb3/cxgb3_offload.c     |   23 ++++++++++++++++++-----
+ drivers/net/cxgb3/l2t.c               |   15 ++++++++++++---
+ drivers/net/cxgb3/l2t.h               |   16 ++++++++++++----
+ drivers/scsi/cxgbi/cxgb3i/cxgb3i.c    |    2 +-
+ 5 files changed, 48 insertions(+), 18 deletions(-)
+
+--- a/drivers/infiniband/hw/cxgb3/iwch_cm.c
++++ b/drivers/infiniband/hw/cxgb3/iwch_cm.c
+@@ -287,7 +287,7 @@ void __free_ep(struct kref *kref)
+       if (test_bit(RELEASE_RESOURCES, &ep->com.flags)) {
+               cxgb3_remove_tid(ep->com.tdev, (void *)ep, ep->hwtid);
+               dst_release(ep->dst);
+-              l2t_release(L2DATA(ep->com.tdev), ep->l2t);
++              l2t_release(ep->com.tdev, ep->l2t);
+       }
+       kfree(ep);
+ }
+@@ -1178,7 +1178,7 @@ static int act_open_rpl(struct t3cdev *t
+               release_tid(ep->com.tdev, GET_TID(rpl), NULL);
+       cxgb3_free_atid(ep->com.tdev, ep->atid);
+       dst_release(ep->dst);
+-      l2t_release(L2DATA(ep->com.tdev), ep->l2t);
++      l2t_release(ep->com.tdev, ep->l2t);
+       put_ep(&ep->com);
+       return CPL_RET_BUF_DONE;
+ }
+@@ -1375,7 +1375,7 @@ static int pass_accept_req(struct t3cdev
+       if (!child_ep) {
+               printk(KERN_ERR MOD "%s - failed to allocate ep entry!\n",
+                      __func__);
+-              l2t_release(L2DATA(tdev), l2t);
++              l2t_release(tdev, l2t);
+               dst_release(dst);
+               goto reject;
+       }
+@@ -1952,7 +1952,7 @@ int iwch_connect(struct iw_cm_id *cm_id,
+       if (!err)
+               goto out;
+-      l2t_release(L2DATA(h->rdev.t3cdev_p), ep->l2t);
++      l2t_release(h->rdev.t3cdev_p, ep->l2t);
+ fail4:
+       dst_release(ep->dst);
+ fail3:
+@@ -2123,7 +2123,7 @@ int iwch_ep_redirect(void *ctx, struct d
+       PDBG("%s ep %p redirect to dst %p l2t %p\n", __func__, ep, new,
+            l2t);
+       dst_hold(new);
+-      l2t_release(L2DATA(ep->com.tdev), ep->l2t);
++      l2t_release(ep->com.tdev, ep->l2t);
+       ep->l2t = l2t;
+       dst_release(old);
+       ep->dst = new;
+--- a/drivers/net/cxgb3/cxgb3_offload.c
++++ b/drivers/net/cxgb3/cxgb3_offload.c
+@@ -1149,12 +1149,14 @@ static void cxgb_redirect(struct dst_ent
+               if (te && te->ctx && te->client && te->client->redirect) {
+                       update_tcb = te->client->redirect(te->ctx, old, new, e);
+                       if (update_tcb) {
++                              rcu_read_lock();
+                               l2t_hold(L2DATA(tdev), e);
++                              rcu_read_unlock();
+                               set_l2t_ix(tdev, tid, e);
+                       }
+               }
+       }
+-      l2t_release(L2DATA(tdev), e);
++      l2t_release(tdev, e);
+ }
+ /*
+@@ -1267,7 +1269,7 @@ int cxgb3_offload_activate(struct adapte
+               goto out_free;
+       err = -ENOMEM;
+-      L2DATA(dev) = t3_init_l2t(l2t_capacity);
++      RCU_INIT_POINTER(dev->l2opt, t3_init_l2t(l2t_capacity));
+       if (!L2DATA(dev))
+               goto out_free;
+@@ -1301,16 +1303,24 @@ int cxgb3_offload_activate(struct adapte
+ out_free_l2t:
+       t3_free_l2t(L2DATA(dev));
+-      L2DATA(dev) = NULL;
++      rcu_assign_pointer(dev->l2opt, NULL);
+ out_free:
+       kfree(t);
+       return err;
+ }
++static void clean_l2_data(struct rcu_head *head)
++{
++      struct l2t_data *d = container_of(head, struct l2t_data, rcu_head);
++      t3_free_l2t(d);
++}
++
++
+ void cxgb3_offload_deactivate(struct adapter *adapter)
+ {
+       struct t3cdev *tdev = &adapter->tdev;
+       struct t3c_data *t = T3C_DATA(tdev);
++      struct l2t_data *d;
+       remove_adapter(adapter);
+       if (list_empty(&adapter_list))
+@@ -1318,8 +1328,11 @@ void cxgb3_offload_deactivate(struct ada
+       free_tid_maps(&t->tid_maps);
+       T3C_DATA(tdev) = NULL;
+-      t3_free_l2t(L2DATA(tdev));
+-      L2DATA(tdev) = NULL;
++      rcu_read_lock();
++      d = L2DATA(tdev);
++      rcu_read_unlock();
++      rcu_assign_pointer(tdev->l2opt, NULL);
++      call_rcu(&d->rcu_head, clean_l2_data);
+       if (t->nofail_skb)
+               kfree_skb(t->nofail_skb);
+       kfree(t);
+--- a/drivers/net/cxgb3/l2t.c
++++ b/drivers/net/cxgb3/l2t.c
+@@ -300,14 +300,21 @@ static inline void reuse_entry(struct l2
+ struct l2t_entry *t3_l2t_get(struct t3cdev *cdev, struct neighbour *neigh,
+                            struct net_device *dev)
+ {
+-      struct l2t_entry *e;
+-      struct l2t_data *d = L2DATA(cdev);
++      struct l2t_entry *e = NULL;
++      struct l2t_data *d;
++      int hash;
+       u32 addr = *(u32 *) neigh->primary_key;
+       int ifidx = neigh->dev->ifindex;
+-      int hash = arp_hash(addr, ifidx, d);
+       struct port_info *p = netdev_priv(dev);
+       int smt_idx = p->port_id;
++      rcu_read_lock();
++      d = L2DATA(cdev);
++      if (!d)
++              goto done_rcu;
++
++      hash = arp_hash(addr, ifidx, d);
++
+       write_lock_bh(&d->lock);
+       for (e = d->l2tab[hash].first; e; e = e->next)
+               if (e->addr == addr && e->ifindex == ifidx &&
+@@ -338,6 +345,8 @@ struct l2t_entry *t3_l2t_get(struct t3cd
+       }
+ done:
+       write_unlock_bh(&d->lock);
++done_rcu:
++      rcu_read_unlock();
+       return e;
+ }
+--- a/drivers/net/cxgb3/l2t.h
++++ b/drivers/net/cxgb3/l2t.h
+@@ -76,6 +76,7 @@ struct l2t_data {
+       atomic_t nfree;         /* number of free entries */
+       rwlock_t lock;
+       struct l2t_entry l2tab[0];
++      struct rcu_head rcu_head;       /* to handle rcu cleanup */
+ };
+ typedef void (*arp_failure_handler_func)(struct t3cdev * dev,
+@@ -99,7 +100,7 @@ static inline void set_arp_failure_handl
+ /*
+  * Getting to the L2 data from an offload device.
+  */
+-#define L2DATA(dev) ((dev)->l2opt)
++#define L2DATA(cdev) (rcu_dereference((cdev)->l2opt))
+ #define W_TCB_L2T_IX    0
+ #define S_TCB_L2T_IX    7
+@@ -126,15 +127,22 @@ static inline int l2t_send(struct t3cdev
+       return t3_l2t_send_slow(dev, skb, e);
+ }
+-static inline void l2t_release(struct l2t_data *d, struct l2t_entry *e)
++static inline void l2t_release(struct t3cdev *t, struct l2t_entry *e)
+ {
+-      if (atomic_dec_and_test(&e->refcnt))
++      struct l2t_data *d;
++
++      rcu_read_lock();
++      d = L2DATA(t);
++
++      if (atomic_dec_and_test(&e->refcnt) && d)
+               t3_l2e_free(d, e);
++
++      rcu_read_unlock();
+ }
+ static inline void l2t_hold(struct l2t_data *d, struct l2t_entry *e)
+ {
+-      if (atomic_add_return(1, &e->refcnt) == 1)      /* 0 -> 1 transition */
++      if (d && atomic_add_return(1, &e->refcnt) == 1) /* 0 -> 1 transition */
+               atomic_dec(&d->nfree);
+ }
+--- a/drivers/scsi/cxgbi/cxgb3i/cxgb3i.c
++++ b/drivers/scsi/cxgbi/cxgb3i/cxgb3i.c
+@@ -913,7 +913,7 @@ static void l2t_put(struct cxgbi_sock *c
+       struct t3cdev *t3dev = (struct t3cdev *)csk->cdev->lldev;
+       if (csk->l2t) {
+-              l2t_release(L2DATA(t3dev), csk->l2t);
++              l2t_release(t3dev, csk->l2t);
+               csk->l2t = NULL;
+               cxgbi_sock_put(csk);
+       }
diff --git a/queue-3.0/iwlagn-fix-dangling-scan-request.patch b/queue-3.0/iwlagn-fix-dangling-scan-request.patch
new file mode 100644 (file)
index 0000000..e224001
--- /dev/null
@@ -0,0 +1,85 @@
+From 6c80c39d9a6986a566c30d797aae37bfb697eea3 Mon Sep 17 00:00:00 2001
+From: Johannes Berg <johannes.berg@intel.com>
+Date: Thu, 22 Sep 2011 14:59:04 -0700
+Subject: iwlagn: fix dangling scan request
+
+From: Johannes Berg <johannes.berg@intel.com>
+
+commit 6c80c39d9a6986a566c30d797aae37bfb697eea3 upstream.
+
+If iwl_scan_initiate() fails for any reason,
+priv->scan_request and priv->scan_vif are left
+dangling. This can lead to a crash later when
+iwl_bg_scan_completed() tries to run a pending
+scan request.
+
+In practice, this seems to be very rare due to
+the STATUS_SCANNING check earlier. That check,
+however, is wrong -- it should allow a scan to
+be queued when a reset/roc scan is going on.
+When a normal scan is already going on, a new
+one can't be issued by mac80211, so that code
+can be removed completely. I introduced this
+bug when adding off-channel support in commit
+266af4c745952e9bebf687dd68af58df553cb59d.
+
+Reported-by: Peng Yan <peng.yan@intel.com>
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/iwlwifi/iwl-scan.c |   30 ++++++++++++++++--------------
+ 1 file changed, 16 insertions(+), 14 deletions(-)
+
+--- a/drivers/net/wireless/iwlwifi/iwl-scan.c
++++ b/drivers/net/wireless/iwlwifi/iwl-scan.c
+@@ -406,31 +406,33 @@ int iwl_mac_hw_scan(struct ieee80211_hw
+       mutex_lock(&priv->mutex);
+-      if (test_bit(STATUS_SCANNING, &priv->status) &&
+-          priv->scan_type != IWL_SCAN_NORMAL) {
+-              IWL_DEBUG_SCAN(priv, "Scan already in progress.\n");
+-              ret = -EAGAIN;
+-              goto out_unlock;
+-      }
+-
+-      /* mac80211 will only ask for one band at a time */
+-      priv->scan_request = req;
+-      priv->scan_vif = vif;
+-
+       /*
+        * If an internal scan is in progress, just set
+        * up the scan_request as per above.
+        */
+       if (priv->scan_type != IWL_SCAN_NORMAL) {
+-              IWL_DEBUG_SCAN(priv, "SCAN request during internal scan\n");
++              IWL_DEBUG_SCAN(priv,
++                             "SCAN request during internal scan - defer\n");
++              priv->scan_request = req;
++              priv->scan_vif = vif;
+               ret = 0;
+-      } else
++      } else {
++              priv->scan_request = req;
++              priv->scan_vif = vif;
++              /*
++               * mac80211 will only ask for one band at a time
++               * so using channels[0] here is ok
++               */
+               ret = iwl_scan_initiate(priv, vif, IWL_SCAN_NORMAL,
+                                       req->channels[0]->band);
++              if (ret) {
++                      priv->scan_request = NULL;
++                      priv->scan_vif = NULL;
++              }
++      }
+       IWL_DEBUG_MAC80211(priv, "leave\n");
+-out_unlock:
+       mutex_unlock(&priv->mutex);
+       return ret;
diff --git a/queue-3.0/iwlegacy-do-not-use-interruptible-waits.patch b/queue-3.0/iwlegacy-do-not-use-interruptible-waits.patch
new file mode 100644 (file)
index 0000000..40bdc2a
--- /dev/null
@@ -0,0 +1,178 @@
+From 65d0f19e583e80e42b1c67c166bfc4dfdf6ab693 Mon Sep 17 00:00:00 2001
+From: Stanislaw Gruszka <sgruszka@redhat.com>
+Date: Tue, 20 Sep 2011 16:49:03 +0200
+Subject: iwlegacy: do not use interruptible waits
+
+From: Stanislaw Gruszka <sgruszka@redhat.com>
+
+commit 65d0f19e583e80e42b1c67c166bfc4dfdf6ab693 upstream.
+
+iwlegacy version of fix:
+
+commit effd4d9aece9184f526e6556786a94d335e38b71
+Author: Johannes Berg <johannes.berg@intel.com>
+Date:   Thu Sep 15 11:46:52 2011 -0700
+
+    iwlagn: do not use interruptible waits
+
+    Since the dawn of its time, iwlwifi has used
+    interruptible waits to wait for synchronous
+    commands and firmware loading.
+
+    This leads to "interesting" bugs, because it
+    can't actually handle the interruptions; for
+    example when a command sending is interrupted
+    it will assume the command completed fully,
+    and then leave it pending, which leads to all
+    kinds of trouble when the command finishes
+    later.
+
+    Since there's no easy way to gracefully deal
+    with interruptions, fix the driver to not use
+    interruptible waits.
+
+    This at least fixes the error
+    iwlagn 0000:02:00.0: Error: Response NULL in  'REPLY_SCAN_ABORT_CMD'
+
+    I have seen in P2P testing, but it is likely
+    that there are other errors caused by this.
+
+Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/iwlegacy/iwl-core.c     |    4 ++--
+ drivers/net/wireless/iwlegacy/iwl-hcmd.c     |    2 +-
+ drivers/net/wireless/iwlegacy/iwl-tx.c       |    2 +-
+ drivers/net/wireless/iwlegacy/iwl3945-base.c |    8 ++++----
+ drivers/net/wireless/iwlegacy/iwl4965-base.c |   10 +++++-----
+ 5 files changed, 13 insertions(+), 13 deletions(-)
+
+--- a/drivers/net/wireless/iwlegacy/iwl-core.c
++++ b/drivers/net/wireless/iwlegacy/iwl-core.c
+@@ -938,7 +938,7 @@ void iwl_legacy_irq_handle_error(struct
+                                       &priv->contexts[IWL_RXON_CTX_BSS]);
+ #endif
+-      wake_up_interruptible(&priv->wait_command_queue);
++      wake_up(&priv->wait_command_queue);
+       /* Keep the restart process from trying to send host
+        * commands by clearing the INIT status bit */
+@@ -1776,7 +1776,7 @@ int iwl_legacy_force_reset(struct iwl_pr
+               IWL_ERR(priv, "On demand firmware reload\n");
+               /* Set the FW error flag -- cleared on iwl_down */
+               set_bit(STATUS_FW_ERROR, &priv->status);
+-              wake_up_interruptible(&priv->wait_command_queue);
++              wake_up(&priv->wait_command_queue);
+               /*
+                * Keep the restart process from trying to send host
+                * commands by clearing the INIT status bit
+--- a/drivers/net/wireless/iwlegacy/iwl-hcmd.c
++++ b/drivers/net/wireless/iwlegacy/iwl-hcmd.c
+@@ -167,7 +167,7 @@ int iwl_legacy_send_cmd_sync(struct iwl_
+               goto out;
+       }
+-      ret = wait_event_interruptible_timeout(priv->wait_command_queue,
++      ret = wait_event_timeout(priv->wait_command_queue,
+                       !test_bit(STATUS_HCMD_ACTIVE, &priv->status),
+                       HOST_COMPLETE_TIMEOUT);
+       if (!ret) {
+--- a/drivers/net/wireless/iwlegacy/iwl-tx.c
++++ b/drivers/net/wireless/iwlegacy/iwl-tx.c
+@@ -647,7 +647,7 @@ iwl_legacy_tx_cmd_complete(struct iwl_pr
+               clear_bit(STATUS_HCMD_ACTIVE, &priv->status);
+               IWL_DEBUG_INFO(priv, "Clearing HCMD_ACTIVE for command %s\n",
+                              iwl_legacy_get_cmd_string(cmd->hdr.cmd));
+-              wake_up_interruptible(&priv->wait_command_queue);
++              wake_up(&priv->wait_command_queue);
+       }
+       /* Mark as unmapped */
+--- a/drivers/net/wireless/iwlegacy/iwl3945-base.c
++++ b/drivers/net/wireless/iwlegacy/iwl3945-base.c
+@@ -841,7 +841,7 @@ static void iwl3945_rx_card_state_notif(
+               wiphy_rfkill_set_hw_state(priv->hw->wiphy,
+                               test_bit(STATUS_RF_KILL_HW, &priv->status));
+       else
+-              wake_up_interruptible(&priv->wait_command_queue);
++              wake_up(&priv->wait_command_queue);
+ }
+ /**
+@@ -2518,7 +2518,7 @@ static void iwl3945_alive_start(struct i
+       iwl3945_reg_txpower_periodic(priv);
+       IWL_DEBUG_INFO(priv, "ALIVE processing complete.\n");
+-      wake_up_interruptible(&priv->wait_command_queue);
++      wake_up(&priv->wait_command_queue);
+       return;
+@@ -2549,7 +2549,7 @@ static void __iwl3945_down(struct iwl_pr
+       iwl_legacy_clear_driver_stations(priv);
+       /* Unblock any waiting calls */
+-      wake_up_interruptible_all(&priv->wait_command_queue);
++      wake_up_all(&priv->wait_command_queue);
+       /* Wipe out the EXIT_PENDING status bit if we are not actually
+        * exiting the module */
+@@ -3125,7 +3125,7 @@ static int iwl3945_mac_start(struct ieee
+       /* Wait for START_ALIVE from ucode. Otherwise callbacks from
+        * mac80211 will not be run successfully. */
+-      ret = wait_event_interruptible_timeout(priv->wait_command_queue,
++      ret = wait_event_timeout(priv->wait_command_queue,
+                       test_bit(STATUS_READY, &priv->status),
+                       UCODE_READY_TIMEOUT);
+       if (!ret) {
+--- a/drivers/net/wireless/iwlegacy/iwl4965-base.c
++++ b/drivers/net/wireless/iwlegacy/iwl4965-base.c
+@@ -704,7 +704,7 @@ static void iwl4965_rx_card_state_notif(
+               wiphy_rfkill_set_hw_state(priv->hw->wiphy,
+                       test_bit(STATUS_RF_KILL_HW, &priv->status));
+       else
+-              wake_up_interruptible(&priv->wait_command_queue);
++              wake_up(&priv->wait_command_queue);
+ }
+ /**
+@@ -1054,7 +1054,7 @@ static void iwl4965_irq_tasklet(struct i
+               handled |= CSR_INT_BIT_FH_TX;
+               /* Wake up uCode load routine, now that load is complete */
+               priv->ucode_write_complete = 1;
+-              wake_up_interruptible(&priv->wait_command_queue);
++              wake_up(&priv->wait_command_queue);
+       }
+       if (inta & ~handled) {
+@@ -2126,7 +2126,7 @@ static void iwl4965_alive_start(struct i
+       iwl4965_rf_kill_ct_config(priv);
+       IWL_DEBUG_INFO(priv, "ALIVE processing complete.\n");
+-      wake_up_interruptible(&priv->wait_command_queue);
++      wake_up(&priv->wait_command_queue);
+       iwl_legacy_power_update_mode(priv, true);
+       IWL_DEBUG_INFO(priv, "Updated power mode\n");
+@@ -2159,7 +2159,7 @@ static void __iwl4965_down(struct iwl_pr
+       iwl_legacy_clear_driver_stations(priv);
+       /* Unblock any waiting calls */
+-      wake_up_interruptible_all(&priv->wait_command_queue);
++      wake_up_all(&priv->wait_command_queue);
+       /* Wipe out the EXIT_PENDING status bit if we are not actually
+        * exiting the module */
+@@ -2597,7 +2597,7 @@ int iwl4965_mac_start(struct ieee80211_h
+       /* Wait for START_ALIVE from Run Time ucode. Otherwise callbacks from
+        * mac80211 will not be run successfully. */
+-      ret = wait_event_interruptible_timeout(priv->wait_command_queue,
++      ret = wait_event_timeout(priv->wait_command_queue,
+                       test_bit(STATUS_READY, &priv->status),
+                       UCODE_READY_TIMEOUT);
+       if (!ret) {
diff --git a/queue-3.0/iwlegacy-fix-command-queue-timeout.patch b/queue-3.0/iwlegacy-fix-command-queue-timeout.patch
new file mode 100644 (file)
index 0000000..06438c1
--- /dev/null
@@ -0,0 +1,49 @@
+From 2e2a41d6ca07d1b2aa67015c35fd80701c98e867 Mon Sep 17 00:00:00 2001
+From: Stanislaw Gruszka <sgruszka@redhat.com>
+Date: Tue, 20 Sep 2011 16:46:36 +0200
+Subject: iwlegacy: fix command queue timeout
+
+From: Stanislaw Gruszka <sgruszka@redhat.com>
+
+commit 2e2a41d6ca07d1b2aa67015c35fd80701c98e867 upstream.
+
+iwlegacy version of fix:
+
+commit 282cdb325aea4ebbc42ce753b47cc96145eb54bc
+Author: Johannes Berg <johannes.berg@intel.com>
+Date:   Mon Sep 12 12:09:10 2011 -0700
+
+    iwlagn: fix command queue timeout
+
+    If the command queue is constantly busy,
+    which can happen in P2P, the hangcheck
+    timer will frequently find a command in
+    it and will eventually reset the device
+    because nothing sets the timestamp for
+    this queue when commands are processed.
+
+    Fix this by setting the timestamp when
+    a command completes.
+
+iwlegacy does not support P2P, but this patch fix possible
+unneeded hardware resets, hence is needed.
+
+Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/iwlegacy/iwl-tx.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/drivers/net/wireless/iwlegacy/iwl-tx.c
++++ b/drivers/net/wireless/iwlegacy/iwl-tx.c
+@@ -625,6 +625,8 @@ iwl_legacy_tx_cmd_complete(struct iwl_pr
+       cmd = txq->cmd[cmd_index];
+       meta = &txq->meta[cmd_index];
++      txq->time_stamp = jiffies;
++
+       pci_unmap_single(priv->pci_dev,
+                        dma_unmap_addr(meta, mapping),
+                        dma_unmap_len(meta, len),
diff --git a/queue-3.0/libsas-fix-failure-to-revalidate-domain-for-anything-but-the-first-expander-child.patch b/queue-3.0/libsas-fix-failure-to-revalidate-domain-for-anything-but-the-first-expander-child.patch
new file mode 100644 (file)
index 0000000..78f665f
--- /dev/null
@@ -0,0 +1,43 @@
+From 24926dadc41cc566e974022b0e66231b82c6375f Mon Sep 17 00:00:00 2001
+From: Mark Salyzyn <mark_salyzyn@us.xyratex.com>
+Date: Thu, 1 Sep 2011 06:11:17 -0700
+Subject: [SCSI] libsas: fix failure to revalidate domain for anything but the first expander child.
+
+From: Mark Salyzyn <mark_salyzyn@us.xyratex.com>
+
+commit 24926dadc41cc566e974022b0e66231b82c6375f upstream.
+
+In an enclosure model where there are chaining expanders to a large body
+of storage, it was discovered that libsas, responding to a broadcast
+event change, would only revalidate the domain of first child expander
+in the list.
+
+The issue is that the pointer value to the discovered source device was
+used to break out of the loop, rather than the content of the pointer.
+
+This still remains non-compliant as the revalidate domain code is
+supposed to loop through all child expanders, and not stop at the first
+one it finds that reports a change count. However, the design of this
+routine does not allow multiple device discoveries and that would be a
+more complicated set of patches reserved for another day. We are fixing
+the glaring bug rather than refactoring the code.
+
+Signed-off-by: Mark Salyzyn <msalyzyn@us.xyratex.com>
+Signed-off-by: James Bottomley <JBottomley@Parallels.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/scsi/libsas/sas_expander.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/scsi/libsas/sas_expander.c
++++ b/drivers/scsi/libsas/sas_expander.c
+@@ -1721,7 +1721,7 @@ static int sas_find_bcast_dev(struct dom
+       list_for_each_entry(ch, &ex->children, siblings) {
+               if (ch->dev_type == EDGE_DEV || ch->dev_type == FANOUT_DEV) {
+                       res = sas_find_bcast_dev(ch, src_dev);
+-                      if (src_dev)
++                      if (*src_dev)
+                               return res;
+               }
+       }
diff --git a/queue-3.0/rtlwifi-rtl8192cu-fix-unitialized-struct.patch b/queue-3.0/rtlwifi-rtl8192cu-fix-unitialized-struct.patch
new file mode 100644 (file)
index 0000000..6358565
--- /dev/null
@@ -0,0 +1,30 @@
+From 831d85471e761e190c3c8979b37540d699ae5812 Mon Sep 17 00:00:00 2001
+From: Larry Finger <Larry.Finger@lwfinger.net>
+Date: Thu, 22 Sep 2011 22:59:02 -0500
+Subject: rtlwifi: rtl8192cu: Fix unitialized struct
+
+From: Larry Finger <Larry.Finger@lwfinger.net>
+
+commit 831d85471e761e190c3c8979b37540d699ae5812 upstream.
+
+Driver rtl8192cu assigns a new struct rtl_tcb_desc object, but fails to
+clear it.
+
+Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/rtlwifi/usb.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/net/wireless/rtlwifi/usb.c
++++ b/drivers/net/wireless/rtlwifi/usb.c
+@@ -861,6 +861,7 @@ static void _rtl_usb_tx_preprocess(struc
+       u8 tid = 0;
+       u16 seq_number = 0;
++      memset(&tcb_desc, 0, sizeof(struct rtl_tcb_desc));
+       if (ieee80211_is_auth(fc)) {
+               RT_TRACE(rtlpriv, COMP_SEND, DBG_DMESG, ("MAC80211_LINKING\n"));
+               rtl_ips_nic_on(hw);
diff --git a/queue-3.0/scsi-qla4xxx-needs-libiscsi.o.patch b/queue-3.0/scsi-qla4xxx-needs-libiscsi.o.patch
new file mode 100644 (file)
index 0000000..a92664c
--- /dev/null
@@ -0,0 +1,49 @@
+From 3538a001ea7db13fa1be2966b71f69d808acff01 Mon Sep 17 00:00:00 2001
+From: Randy Dunlap <rdunlap@xenotime.net>
+Date: Wed, 31 Aug 2011 15:02:00 -0700
+Subject: [SCSI] scsi: qla4xxx needs libiscsi.o
+
+From: Randy Dunlap <rdunlap@xenotime.net>
+
+commit 3538a001ea7db13fa1be2966b71f69d808acff01 upstream.
+
+qla4xxx driver needs to be linked with libiscsi.o to fix
+build errors.  This happens when no other drivers that use
+libiscsi.o are enabled.
+
+ERROR: "iscsi_conn_stop" [drivers/scsi/qla4xxx/qla4xxx.ko] undefined!
+ERROR: "iscsi_conn_get_addr_param" [drivers/scsi/qla4xxx/qla4xxx.ko] undefined!
+ERROR: "iscsi_session_teardown" [drivers/scsi/qla4xxx/qla4xxx.ko] undefined!
+ERROR: "iscsi_host_alloc" [drivers/scsi/qla4xxx/qla4xxx.ko] undefined!
+ERROR: "iscsi_conn_start" [drivers/scsi/qla4xxx/qla4xxx.ko] undefined!
+ERROR: "iscsi_conn_send_pdu" [drivers/scsi/qla4xxx/qla4xxx.ko] undefined!
+ERROR: "iscsi_session_get_param" [drivers/scsi/qla4xxx/qla4xxx.ko] undefined!
+ERROR: "iscsi_conn_get_param" [drivers/scsi/qla4xxx/qla4xxx.ko] undefined!
+ERROR: "iscsi_set_param" [drivers/scsi/qla4xxx/qla4xxx.ko] undefined!
+ERROR: "iscsi_session_failure" [drivers/scsi/qla4xxx/qla4xxx.ko] undefined!
+ERROR: "iscsi_complete_pdu" [drivers/scsi/qla4xxx/qla4xxx.ko] undefined!
+ERROR: "iscsi_session_setup" [drivers/scsi/qla4xxx/qla4xxx.ko] undefined!
+ERROR: "iscsi_conn_bind" [drivers/scsi/qla4xxx/qla4xxx.ko] undefined!
+ERROR: "iscsi_conn_setup" [drivers/scsi/qla4xxx/qla4xxx.ko] undefined!
+ERROR: "iscsi_itt_to_task" [drivers/scsi/qla4xxx/qla4xxx.ko] undefined!
+
+Signed-off-by: Randy Dunlap <rdunlap@xenotime.net>
+Reviewed-by: Mike Christie <michaelc@cs.wisc.edu>
+Signed-off-by: James Bottomley <JBottomley@Parallels.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/scsi/Makefile |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/scsi/Makefile
++++ b/drivers/scsi/Makefile
+@@ -88,7 +88,7 @@ obj-$(CONFIG_SCSI_QLOGIC_FAS)        += qlogicf
+ obj-$(CONFIG_PCMCIA_QLOGIC)   += qlogicfas408.o
+ obj-$(CONFIG_SCSI_QLOGIC_1280)        += qla1280.o 
+ obj-$(CONFIG_SCSI_QLA_FC)     += qla2xxx/
+-obj-$(CONFIG_SCSI_QLA_ISCSI)  += qla4xxx/
++obj-$(CONFIG_SCSI_QLA_ISCSI)  += libiscsi.o qla4xxx/
+ obj-$(CONFIG_SCSI_LPFC)               += lpfc/
+ obj-$(CONFIG_SCSI_BFA_FC)     += bfa/
+ obj-$(CONFIG_SCSI_PAS16)      += pas16.o
index d7e3cde1d42971cf9a7e0bf27a713fa3cc828440..aadf6f9d24361f42d49baf5c08ebddf84f32efe4 100644 (file)
@@ -228,3 +228,17 @@ alsa-hda-realtek-avoid-bogus-hp-pin-assignment.patch
 alsa-hda-no-power-nids-on-92hd93.patch
 alsa-usb-audio-check-for-possible-chip-null-pointer-before-clearing-probing-flag.patch
 memcg-fix-vmscan-count-in-small-memcgs.patch
+cxgb3i-convert-cdev-l2opt-to-use-rcu-to-prevent-null-dereference.patch
+3w-9xxx-fix-iommu_iova-leak.patch
+aacraid-reset-should-disable-msi-interrupt.patch
+libsas-fix-failure-to-revalidate-domain-for-anything-but-the-first-expander-child.patch
+scsi-qla4xxx-needs-libiscsi.o.patch
+cfg80211-fix-validation-of-akm-suites.patch
+ath9k_hw-fix-rx-dma-stuck-for-ar9003-chips.patch
+iwlegacy-fix-command-queue-timeout.patch
+rtlwifi-rtl8192cu-fix-unitialized-struct.patch
+iwlegacy-do-not-use-interruptible-waits.patch
+iwlagn-fix-dangling-scan-request.patch
+bnx2x-fix-hw-attention-handling.patch
+bnx2x-add-missing-break-in-bnx2x_dcbnl_get_cap.patch
+block-free-queue-resources-at-blk_release_queue.patch