]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
.33 patches
authorGreg Kroah-Hartman <gregkh@suse.de>
Mon, 8 Mar 2010 23:16:13 +0000 (15:16 -0800)
committerGreg Kroah-Hartman <gregkh@suse.de>
Mon, 8 Mar 2010 23:16:13 +0000 (15:16 -0800)
12 files changed:
queue-2.6.33/airo-fix-setting-zero-length-wep-key.patch [new file with mode: 0644]
queue-2.6.33/hid-remove-tenx-ibuddy-from-blacklist.patch [new file with mode: 0644]
queue-2.6.33/hid-usbhid-introduce-timeout-for-stuck-ctrl-out-urbs.patch [new file with mode: 0644]
queue-2.6.33/mac80211-quit-addba_resp_timer-if-tx-ba-session-is-torn-down.patch [new file with mode: 0644]
queue-2.6.33/mac80211-reset-dynamic-ps-timer-in-rx-path.patch [new file with mode: 0644]
queue-2.6.33/mpt2sas-delete-volume-before-hba-detach.patch [new file with mode: 0644]
queue-2.6.33/readahead-introduce-fmode_random-for-posix_fadv_random.patch [new file with mode: 0644]
queue-2.6.33/series
queue-2.6.33/slab-initialize-unused-alien-cache-entry-as-null-at-alloc_alien_cache.patch [new file with mode: 0644]
queue-2.6.33/v4l-dvb-13991-gspca_mr973010a-fix-cif-type-1-cameras-not-streaming-on-uhci-controllers.patch [new file with mode: 0644]
queue-2.6.33/vfs-take-f_lock-on-modifying-f_mode-after-open-time.patch [new file with mode: 0644]
queue-2.6.33/x86-uv-uv_global_gru_mmr_address-macro-fix.patch [new file with mode: 0644]

diff --git a/queue-2.6.33/airo-fix-setting-zero-length-wep-key.patch b/queue-2.6.33/airo-fix-setting-zero-length-wep-key.patch
new file mode 100644 (file)
index 0000000..ec4ec8d
--- /dev/null
@@ -0,0 +1,84 @@
+From f09c256375c7cf1e112b8ef6306cdd313490d7c0 Mon Sep 17 00:00:00 2001
+From: Stanislaw Gruszka <sgruszka@redhat.com>
+Date: Tue, 2 Feb 2010 15:34:50 +0100
+Subject: airo: fix setting zero length WEP key
+
+From: Stanislaw Gruszka <sgruszka@redhat.com>
+
+commit f09c256375c7cf1e112b8ef6306cdd313490d7c0 upstream.
+
+Patch prevents call set_wep_key() with zero key length. That fix long
+standing regression since commit c0380693520b1a1e4f756799a0edc379378b462a
+"airo: clean up WEP key operations". Additionally print call trace when
+someone will try to use improper parameters, and remove key.len = 0
+assignment, because it is in not possible code path.
+
+Reported-by: Chris Siebenmann <cks-rhbugzilla@cs.toronto.edu>
+Bisected-by: Chris Siebenmann <cks-rhbugzilla@cs.toronto.edu>
+Tested-by: Chris Siebenmann <cks@cs.toronto.edu>
+Cc: Dan Williams <dcbw@redhat.com>
+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/airo.c |   34 ++++++++++++++++++----------------
+ 1 file changed, 18 insertions(+), 16 deletions(-)
+
+--- a/drivers/net/wireless/airo.c
++++ b/drivers/net/wireless/airo.c
+@@ -5254,11 +5254,7 @@ static int set_wep_key(struct airo_info
+       WepKeyRid wkr;
+       int rc;
+-      if (keylen == 0) {
+-              airo_print_err(ai->dev->name, "%s: key length to set was zero",
+-                             __func__);
+-              return -1;
+-      }
++      WARN_ON(keylen == 0);
+       memset(&wkr, 0, sizeof(wkr));
+       wkr.len = cpu_to_le16(sizeof(wkr));
+@@ -6405,11 +6401,7 @@ static int airo_set_encode(struct net_de
+               if (dwrq->length > MIN_KEY_SIZE)
+                       key.len = MAX_KEY_SIZE;
+               else
+-                      if (dwrq->length > 0)
+-                              key.len = MIN_KEY_SIZE;
+-                      else
+-                              /* Disable the key */
+-                              key.len = 0;
++                      key.len = MIN_KEY_SIZE;
+               /* Check if the key is not marked as invalid */
+               if(!(dwrq->flags & IW_ENCODE_NOKEY)) {
+                       /* Cleanup */
+@@ -6590,12 +6582,22 @@ static int airo_set_encodeext(struct net
+               default:
+                       return -EINVAL;
+               }
+-              /* Send the key to the card */
+-              rc = set_wep_key(local, idx, key.key, key.len, perm, 1);
+-              if (rc < 0) {
+-                      airo_print_err(local->dev->name, "failed to set WEP key"
+-                                     " at index %d: %d.", idx, rc);
+-                      return rc;
++              if (key.len == 0) {
++                      rc = set_wep_tx_idx(local, idx, perm, 1);
++                      if (rc < 0) {
++                              airo_print_err(local->dev->name,
++                                             "failed to set WEP transmit index to %d: %d.",
++                                             idx, rc);
++                              return rc;
++                      }
++              } else {
++                      rc = set_wep_key(local, idx, key.key, key.len, perm, 1);
++                      if (rc < 0) {
++                              airo_print_err(local->dev->name,
++                                             "failed to set WEP key at index %d: %d.",
++                                             idx, rc);
++                              return rc;
++                      }
+               }
+       }
diff --git a/queue-2.6.33/hid-remove-tenx-ibuddy-from-blacklist.patch b/queue-2.6.33/hid-remove-tenx-ibuddy-from-blacklist.patch
new file mode 100644 (file)
index 0000000..7f49f93
--- /dev/null
@@ -0,0 +1,54 @@
+From 4bb9508bbbb06f10bc3e249dd34375b4a4d6bfc0 Mon Sep 17 00:00:00 2001
+From: Jiri Kosina <jkosina@suse.cz>
+Date: Wed, 23 Dec 2009 14:13:46 +0100
+Subject: HID: remove TENX iBuddy from blacklist
+
+From: Jiri Kosina <jkosina@suse.cz>
+
+commit 4bb9508bbbb06f10bc3e249dd34375b4a4d6bfc0 upstream.
+
+There were multiple reports which indicate that vendor messed up horribly
+and the same VID/PID combination is used for completely different devices,
+some of them requiring the blacklist entry and other not.
+
+Remove the blacklist entry for this combination of VID/PID completely, and let
+the user decide and unbind the driver via sysfs eventually, if needed. Proper
+fix would be fixing the vendor.
+
+References:
+
+http://lkml.org/lkml/2009/2/10/434
+http://bugzilla.kernel.org/show_bug.cgi?id=13411
+
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/hid/hid-core.c |    2 --
+ drivers/hid/hid-ids.h  |    4 ----
+ 2 files changed, 6 deletions(-)
+
+--- a/drivers/hid/hid-core.c
++++ b/drivers/hid/hid-core.c
+@@ -1661,8 +1661,6 @@ static const struct hid_device_id hid_ig
+       { HID_USB_DEVICE(USB_VENDOR_ID_PANJIT, 0x0004) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_PHILIPS, USB_DEVICE_ID_PHILIPS_IEEE802154_DONGLE) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_POWERCOM, USB_DEVICE_ID_POWERCOM_UPS) },
+-      { HID_USB_DEVICE(USB_VENDOR_ID_TENX, USB_DEVICE_ID_TENX_IBUDDY1) },
+-      { HID_USB_DEVICE(USB_VENDOR_ID_TENX, USB_DEVICE_ID_TENX_IBUDDY2) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_LABPRO) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_GOTEMP) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_SKIP) },
+--- a/drivers/hid/hid-ids.h
++++ b/drivers/hid/hid-ids.h
+@@ -402,10 +402,6 @@
+ #define USB_VENDOR_ID_SUNPLUS         0x04fc
+ #define USB_DEVICE_ID_SUNPLUS_WDESKTOP        0x05d8
+-#define USB_VENDOR_ID_TENX            0x1130
+-#define USB_DEVICE_ID_TENX_IBUDDY1    0x0001
+-#define USB_DEVICE_ID_TENX_IBUDDY2    0x0002
+-
+ #define USB_VENDOR_ID_THRUSTMASTER    0x044f
+ #define USB_VENDOR_ID_TOPMAX          0x0663
diff --git a/queue-2.6.33/hid-usbhid-introduce-timeout-for-stuck-ctrl-out-urbs.patch b/queue-2.6.33/hid-usbhid-introduce-timeout-for-stuck-ctrl-out-urbs.patch
new file mode 100644 (file)
index 0000000..7b70ee7
--- /dev/null
@@ -0,0 +1,102 @@
+From 858155fbcc0cd713f6382c527bb1c3abc0ed6d00 Mon Sep 17 00:00:00 2001
+From: Oliver Neukum <oliver@neukum.org>
+Date: Fri, 12 Feb 2010 13:02:28 +0100
+Subject: HID: usbhid: introduce timeout for stuck ctrl/out URBs
+
+From: Oliver Neukum <oliver@neukum.org>
+
+commit 858155fbcc0cd713f6382c527bb1c3abc0ed6d00 upstream.
+
+Some devices do not react to a control request (seen on APC UPS's) resulting in
+a slow stream of messages, "generic-usb ... control queue full".  Therefore
+request needs a timeout.
+
+Signed-off-by: Oliver Neukum <oliver@neukum.org>
+Signed-off-by: David Fries <david@fries.net>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/hid/usbhid/hid-core.c |   28 ++++++++++++++++++++++++++--
+ drivers/hid/usbhid/usbhid.h   |    2 ++
+ 2 files changed, 28 insertions(+), 2 deletions(-)
+
+--- a/drivers/hid/usbhid/hid-core.c
++++ b/drivers/hid/usbhid/hid-core.c
+@@ -316,6 +316,7 @@ static int hid_submit_out(struct hid_dev
+                       err_hid("usb_submit_urb(out) failed");
+                       return -1;
+               }
++              usbhid->last_out = jiffies;
+       } else {
+               /*
+                * queue work to wake up the device.
+@@ -377,6 +378,7 @@ static int hid_submit_ctrl(struct hid_de
+                       err_hid("usb_submit_urb(ctrl) failed");
+                       return -1;
+               }
++              usbhid->last_ctrl = jiffies;
+       } else {
+               /*
+                * queue work to wake up the device.
+@@ -512,9 +514,20 @@ static void __usbhid_submit_report(struc
+               usbhid->out[usbhid->outhead].report = report;
+               usbhid->outhead = head;
+-              if (!test_and_set_bit(HID_OUT_RUNNING, &usbhid->iofl))
++              if (!test_and_set_bit(HID_OUT_RUNNING, &usbhid->iofl)) {
+                       if (hid_submit_out(hid))
+                               clear_bit(HID_OUT_RUNNING, &usbhid->iofl);
++              } else {
++                      /*
++                       * the queue is known to run
++                       * but an earlier request may be stuck
++                       * we may need to time out
++                       * no race because this is called under
++                       * spinlock
++                       */
++                      if (time_after(jiffies, usbhid->last_out + HZ * 5))
++                              usb_unlink_urb(usbhid->urbout);
++              }
+               return;
+       }
+@@ -535,9 +548,20 @@ static void __usbhid_submit_report(struc
+       usbhid->ctrl[usbhid->ctrlhead].dir = dir;
+       usbhid->ctrlhead = head;
+-      if (!test_and_set_bit(HID_CTRL_RUNNING, &usbhid->iofl))
++      if (!test_and_set_bit(HID_CTRL_RUNNING, &usbhid->iofl)) {
+               if (hid_submit_ctrl(hid))
+                       clear_bit(HID_CTRL_RUNNING, &usbhid->iofl);
++      } else {
++              /*
++               * the queue is known to run
++               * but an earlier request may be stuck
++               * we may need to time out
++               * no race because this is called under
++               * spinlock
++               */
++              if (time_after(jiffies, usbhid->last_ctrl + HZ * 5))
++                      usb_unlink_urb(usbhid->urbctrl);
++      }
+ }
+ void usbhid_submit_report(struct hid_device *hid, struct hid_report *report, unsigned char dir)
+--- a/drivers/hid/usbhid/usbhid.h
++++ b/drivers/hid/usbhid/usbhid.h
+@@ -80,12 +80,14 @@ struct usbhid_device {
+       unsigned char ctrlhead, ctrltail;                               /* Control fifo head & tail */
+       char *ctrlbuf;                                                  /* Control buffer */
+       dma_addr_t ctrlbuf_dma;                                         /* Control buffer dma */
++      unsigned long last_ctrl;                                                /* record of last output for timeouts */
+       struct urb *urbout;                                             /* Output URB */
+       struct hid_output_fifo out[HID_CONTROL_FIFO_SIZE];              /* Output pipe fifo */
+       unsigned char outhead, outtail;                                 /* Output pipe fifo head & tail */
+       char *outbuf;                                                   /* Output buffer */
+       dma_addr_t outbuf_dma;                                          /* Output buffer dma */
++      unsigned long last_out;                                                 /* record of last output for timeouts */
+       spinlock_t lock;                                                /* fifo spinlock */
+       unsigned long iofl;                                             /* I/O flags (CTRL_RUNNING, OUT_RUNNING) */
diff --git a/queue-2.6.33/mac80211-quit-addba_resp_timer-if-tx-ba-session-is-torn-down.patch b/queue-2.6.33/mac80211-quit-addba_resp_timer-if-tx-ba-session-is-torn-down.patch
new file mode 100644 (file)
index 0000000..8d6bc48
--- /dev/null
@@ -0,0 +1,36 @@
+From 3dc1de0bf23816ed557ac8addf680cd5ee57e805 Mon Sep 17 00:00:00 2001
+From: Zhu Yi <yi.zhu@intel.com>
+Date: Mon, 28 Dec 2009 16:57:15 +0800
+Subject: mac80211: quit addba_resp_timer if Tx BA session is torn down
+
+From: Zhu Yi <yi.zhu@intel.com>
+
+commit 3dc1de0bf23816ed557ac8addf680cd5ee57e805 upstream.
+
+Make addba_resp_timer aware the HT_AGG_STATE_REQ_STOP_BA_MSK mask
+so that when ___ieee80211_stop_tx_ba_session() is issued the timer
+will quit. Otherwise when suspend happens before the timer expired,
+the timer handler will be called immediately after resume and
+messes up driver status.
+
+Signed-off-by: Zhu Yi <yi.zhu@intel.com>
+Acked-by: Johannes Berg <johannes@sipsolutions.net>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/mac80211/agg-tx.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/net/mac80211/agg-tx.c
++++ b/net/mac80211/agg-tx.c
+@@ -179,7 +179,8 @@ static void sta_addba_resp_timer_expired
+       /* check if the TID waits for addBA response */
+       spin_lock_bh(&sta->lock);
+-      if ((*state & (HT_ADDBA_REQUESTED_MSK | HT_ADDBA_RECEIVED_MSK)) !=
++      if ((*state & (HT_ADDBA_REQUESTED_MSK | HT_ADDBA_RECEIVED_MSK |
++                     HT_AGG_STATE_REQ_STOP_BA_MSK)) !=
+                                               HT_ADDBA_REQUESTED_MSK) {
+               spin_unlock_bh(&sta->lock);
+               *state = HT_AGG_STATE_IDLE;
diff --git a/queue-2.6.33/mac80211-reset-dynamic-ps-timer-in-rx-path.patch b/queue-2.6.33/mac80211-reset-dynamic-ps-timer-in-rx-path.patch
new file mode 100644 (file)
index 0000000..d3f4d94
--- /dev/null
@@ -0,0 +1,49 @@
+From e15276a4b220c54db665cf46a92bd9ceb9aeb052 Mon Sep 17 00:00:00 2001
+From: Vivek Natarajan <vnatarajan@atheros.com>
+Date: Mon, 8 Feb 2010 17:47:01 +0530
+Subject: mac80211: Reset dynamic ps timer in Rx path.
+
+From: Vivek Natarajan <vnatarajan@atheros.com>
+
+commit e15276a4b220c54db665cf46a92bd9ceb9aeb052 upstream.
+
+The current mac80211 implementation enables power save if there
+is no Tx traffic for a specific timeout. Hence, PS is triggered
+even if there is a continuous Rx only traffic(like UDP) going on.
+This makes the drivers to wait on the tim bit in the next beacon
+to awake which leads to redundant sleep-wake cycles.
+Fix this by restarting the dynamic ps timer on receiving every
+data packet.
+
+Signed-off-by: Vivek Natarajan <vnatarajan@atheros.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/mac80211/rx.c |    8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+--- a/net/mac80211/rx.c
++++ b/net/mac80211/rx.c
+@@ -1788,6 +1788,7 @@ static ieee80211_rx_result debug_noinlin
+ ieee80211_rx_h_data(struct ieee80211_rx_data *rx)
+ {
+       struct ieee80211_sub_if_data *sdata = rx->sdata;
++      struct ieee80211_local *local = rx->local;
+       struct net_device *dev = sdata->dev;
+       struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data;
+       __le16 fc = hdr->frame_control;
+@@ -1819,6 +1820,13 @@ ieee80211_rx_h_data(struct ieee80211_rx_
+       dev->stats.rx_packets++;
+       dev->stats.rx_bytes += rx->skb->len;
++      if (ieee80211_is_data(hdr->frame_control) &&
++          !is_multicast_ether_addr(hdr->addr1) &&
++          local->hw.conf.dynamic_ps_timeout > 0 && local->ps_sdata) {
++                      mod_timer(&local->dynamic_ps_timer, jiffies +
++                       msecs_to_jiffies(local->hw.conf.dynamic_ps_timeout));
++      }
++
+       ieee80211_deliver_skb(rx);
+       return RX_QUEUED;
diff --git a/queue-2.6.33/mpt2sas-delete-volume-before-hba-detach.patch b/queue-2.6.33/mpt2sas-delete-volume-before-hba-detach.patch
new file mode 100644 (file)
index 0000000..c1f33ca
--- /dev/null
@@ -0,0 +1,59 @@
+From d7384b28afb2bf2b7be835ddc8c852bdc5e0ce1c Mon Sep 17 00:00:00 2001
+From: Kashyap, Desai <kashyap.desai@lsi.com>
+Date: Wed, 16 Dec 2009 18:50:06 +0530
+Subject: [SCSI] mpt2sas: Delete volume before HBA detach.
+
+From: Kashyap, Desai <kashyap.desai@lsi.com>
+
+commit d7384b28afb2bf2b7be835ddc8c852bdc5e0ce1c upstream.
+
+The driver hangs when doing `rmmod mpt2sas` if there are any
+IR volumes present.The hang is due the scsi midlayer trying to access the
+IR volumes after the driver releases controller resources.  Perhaps when
+scsi_remove_host is called,the scsi mid layer is sending some request.
+This doesn't occur for bare drives becuase the driver is already reporting
+those drives deleted prior to calling mpt2sas_base_detach.
+To solve this issue, we need to delete the volumes as well.
+
+Signed-off-by: Kashyap Desai <kashyap.desai@lsi.com>
+Reviewed-by: Eric Moore <eric.moore@lsi.com>
+Signed-off-by: James Bottomley <James.Bottomley@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/scsi/mpt2sas/mpt2sas_scsih.c |   17 +++++++++++++++++
+ 1 file changed, 17 insertions(+)
+
+--- a/drivers/scsi/mpt2sas/mpt2sas_scsih.c
++++ b/drivers/scsi/mpt2sas/mpt2sas_scsih.c
+@@ -5998,6 +5998,8 @@ _scsih_remove(struct pci_dev *pdev)
+       struct _sas_port *mpt2sas_port;
+       struct _sas_device *sas_device;
+       struct _sas_node *expander_sibling;
++      struct _raid_device *raid_device, *next;
++      struct MPT2SAS_TARGET *sas_target_priv_data;
+       struct workqueue_struct *wq;
+       unsigned long flags;
+@@ -6011,6 +6013,21 @@ _scsih_remove(struct pci_dev *pdev)
+       if (wq)
+               destroy_workqueue(wq);
++      /* release all the volumes */
++      list_for_each_entry_safe(raid_device, next, &ioc->raid_device_list,
++          list) {
++              if (raid_device->starget) {
++                      sas_target_priv_data =
++                          raid_device->starget->hostdata;
++                      sas_target_priv_data->deleted = 1;
++                      scsi_remove_target(&raid_device->starget->dev);
++              }
++              printk(MPT2SAS_INFO_FMT "removing handle(0x%04x), wwid"
++                  "(0x%016llx)\n", ioc->name,  raid_device->handle,
++                  (unsigned long long) raid_device->wwid);
++              _scsih_raid_device_remove(ioc, raid_device);
++      }
++
+       /* free ports attached to the sas_host */
+  retry_again:
+       list_for_each_entry(mpt2sas_port,
diff --git a/queue-2.6.33/readahead-introduce-fmode_random-for-posix_fadv_random.patch b/queue-2.6.33/readahead-introduce-fmode_random-for-posix_fadv_random.patch
new file mode 100644 (file)
index 0000000..beb527f
--- /dev/null
@@ -0,0 +1,105 @@
+From 0141450f66c3c12a3aaa869748caa64241885cdf Mon Sep 17 00:00:00 2001
+From: Wu Fengguang <fengguang.wu@intel.com>
+Date: Fri, 5 Mar 2010 13:42:03 -0800
+Subject: readahead: introduce FMODE_RANDOM for POSIX_FADV_RANDOM
+
+From: Wu Fengguang <fengguang.wu@intel.com>
+
+commit 0141450f66c3c12a3aaa869748caa64241885cdf upstream.
+
+This fixes inefficient page-by-page reads on POSIX_FADV_RANDOM.
+
+POSIX_FADV_RANDOM used to set ra_pages=0, which leads to poor performance:
+a 16K read will be carried out in 4 _sync_ 1-page reads.
+
+In other places, ra_pages==0 means
+- it's ramfs/tmpfs/hugetlbfs/sysfs/configfs
+- some IO error happened
+where multi-page read IO won't help or should be avoided.
+
+POSIX_FADV_RANDOM actually want a different semantics: to disable the
+*heuristic* readahead algorithm, and to use a dumb one which faithfully
+submit read IO for whatever application requests.
+
+So introduce a flag FMODE_RANDOM for POSIX_FADV_RANDOM.
+
+Note that the random hint is not likely to help random reads performance
+noticeably.  And it may be too permissive on huge request size (its IO
+size is not limited by read_ahead_kb).
+
+In Quentin's report (http://lkml.org/lkml/2009/12/24/145), the overall
+(NFS read) performance of the application increased by 313%!
+
+Tested-by: Quentin Barnes <qbarnes+nfs@yahoo-inc.com>
+Signed-off-by: Wu Fengguang <fengguang.wu@intel.com>
+Cc: Nick Piggin <npiggin@suse.de>
+Cc: Andi Kleen <andi@firstfloor.org>
+Cc: Steven Whitehouse <swhiteho@redhat.com>
+Cc: David Howells <dhowells@redhat.com>
+Cc: Jonathan Corbet <corbet@lwn.net>
+Cc: Al Viro <viro@zeniv.linux.org.uk>
+Cc: Christoph Hellwig <hch@infradead.org>
+Cc: Trond Myklebust <Trond.Myklebust@netapp.com>
+Cc: Chuck Lever <chuck.lever@oracle.com>
+Cc: <qbarnes+nfs@yahoo-inc.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ include/linux/fs.h |    3 +++
+ mm/fadvise.c       |   10 +++++++++-
+ mm/readahead.c     |    6 ++++++
+ 3 files changed, 18 insertions(+), 1 deletion(-)
+
+--- a/include/linux/fs.h
++++ b/include/linux/fs.h
+@@ -87,6 +87,9 @@ struct inodes_stat_t {
+  */
+ #define FMODE_NOCMTIME                ((__force fmode_t)2048)
++/* Expect random access pattern */
++#define FMODE_RANDOM          ((__force fmode_t)4096)
++
+ /*
+  * The below are the various read and write types that we support. Some of
+  * them include behavioral modifiers that send information down to the
+--- a/mm/fadvise.c
++++ b/mm/fadvise.c
+@@ -77,12 +77,20 @@ SYSCALL_DEFINE(fadvise64_64)(int fd, lof
+       switch (advice) {
+       case POSIX_FADV_NORMAL:
+               file->f_ra.ra_pages = bdi->ra_pages;
++              spin_lock(&file->f_lock);
++              file->f_mode &= ~FMODE_RANDOM;
++              spin_unlock(&file->f_lock);
+               break;
+       case POSIX_FADV_RANDOM:
+-              file->f_ra.ra_pages = 0;
++              spin_lock(&file->f_lock);
++              file->f_mode |= FMODE_RANDOM;
++              spin_unlock(&file->f_lock);
+               break;
+       case POSIX_FADV_SEQUENTIAL:
+               file->f_ra.ra_pages = bdi->ra_pages * 2;
++              spin_lock(&file->f_lock);
++              file->f_mode &= ~FMODE_RANDOM;
++              spin_unlock(&file->f_lock);
+               break;
+       case POSIX_FADV_WILLNEED:
+               if (!mapping->a_ops->readpage) {
+--- a/mm/readahead.c
++++ b/mm/readahead.c
+@@ -501,6 +501,12 @@ void page_cache_sync_readahead(struct ad
+       if (!ra->ra_pages)
+               return;
++      /* be dumb */
++      if (filp->f_mode & FMODE_RANDOM) {
++              force_page_cache_readahead(mapping, filp, offset, req_size);
++              return;
++      }
++
+       /* do read-ahead */
+       ondemand_readahead(mapping, ra, filp, false, offset, req_size);
+ }
index d51fe28c8c2421153c476f5ff4a6e2ab6126ef59..4645bf68a370bcc85163dcaba2d796e00abc6eca 100644 (file)
@@ -3,3 +3,14 @@ netlabel-fix-export-of-selinux-categories-127.patch
 pci-hotplug-ibmphp-read-the-length-of-ebda-and-map-entire-ebda-region.patch
 pci-hotplug-check-ioremap-return-value-in-ibmphp_ebda.c.patch
 security-fix-error-return-path-in-ima_inode_alloc.patch
+airo-fix-setting-zero-length-wep-key.patch
+hid-remove-tenx-ibuddy-from-blacklist.patch
+hid-usbhid-introduce-timeout-for-stuck-ctrl-out-urbs.patch
+mac80211-quit-addba_resp_timer-if-tx-ba-session-is-torn-down.patch
+mac80211-reset-dynamic-ps-timer-in-rx-path.patch
+mpt2sas-delete-volume-before-hba-detach.patch
+readahead-introduce-fmode_random-for-posix_fadv_random.patch
+slab-initialize-unused-alien-cache-entry-as-null-at-alloc_alien_cache.patch
+v4l-dvb-13991-gspca_mr973010a-fix-cif-type-1-cameras-not-streaming-on-uhci-controllers.patch
+vfs-take-f_lock-on-modifying-f_mode-after-open-time.patch
+x86-uv-uv_global_gru_mmr_address-macro-fix.patch
diff --git a/queue-2.6.33/slab-initialize-unused-alien-cache-entry-as-null-at-alloc_alien_cache.patch b/queue-2.6.33/slab-initialize-unused-alien-cache-entry-as-null-at-alloc_alien_cache.patch
new file mode 100644 (file)
index 0000000..ce4e35e
--- /dev/null
@@ -0,0 +1,42 @@
+From f3186a9c51eabe75b2780153ed7f07778d78b16e Mon Sep 17 00:00:00 2001
+From: Haicheng Li <haicheng.li@linux.intel.com>
+Date: Wed, 6 Jan 2010 15:25:23 +0800
+Subject: slab: initialize unused alien cache entry as NULL at alloc_alien_cache().
+
+From: Haicheng Li <haicheng.li@linux.intel.com>
+
+commit f3186a9c51eabe75b2780153ed7f07778d78b16e upstream.
+
+Comparing with existing code, it's a simpler way to use kzalloc_node()
+to ensure that each unused alien cache entry is NULL.
+
+CC: Eric Dumazet <eric.dumazet@gmail.com>
+Acked-by: Andi Kleen <ak@linux.intel.com>
+Acked-by: Christoph Lameter <cl@linux-foundation.org>
+Acked-by: Matt Mackall <mpm@selenic.com>
+Signed-off-by: Haicheng Li <haicheng.li@linux.intel.com>
+Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ mm/slab.c |    6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+--- a/mm/slab.c
++++ b/mm/slab.c
+@@ -983,13 +983,11 @@ static struct array_cache **alloc_alien_
+       if (limit > 1)
+               limit = 12;
+-      ac_ptr = kmalloc_node(memsize, gfp, node);
++      ac_ptr = kzalloc_node(memsize, gfp, node);
+       if (ac_ptr) {
+               for_each_node(i) {
+-                      if (i == node || !node_online(i)) {
+-                              ac_ptr[i] = NULL;
++                      if (i == node || !node_online(i))
+                               continue;
+-                      }
+                       ac_ptr[i] = alloc_arraycache(node, limit, 0xbaadf00d, gfp);
+                       if (!ac_ptr[i]) {
+                               for (i--; i >= 0; i--)
diff --git a/queue-2.6.33/v4l-dvb-13991-gspca_mr973010a-fix-cif-type-1-cameras-not-streaming-on-uhci-controllers.patch b/queue-2.6.33/v4l-dvb-13991-gspca_mr973010a-fix-cif-type-1-cameras-not-streaming-on-uhci-controllers.patch
new file mode 100644 (file)
index 0000000..d4bb77c
--- /dev/null
@@ -0,0 +1,43 @@
+From 70136081fc67ea77d849f86fa323e5773c8e40ea Mon Sep 17 00:00:00 2001
+From: Theodore Kilgore <kilgota@auburn.edu>
+Date: Fri, 25 Dec 2009 05:15:10 -0300
+Subject: V4L/DVB (13991): gspca_mr973010a: Fix cif type 1 cameras not streaming on UHCI controllers
+
+From: Theodore Kilgore <kilgota@auburn.edu>
+
+commit 70136081fc67ea77d849f86fa323e5773c8e40ea upstream.
+
+If you read the mail to Oliver Neukum on the linux-usb list, then you know
+that I found a cure for the mysterious problem that the MR97310a CIF "type
+1" cameras have been freezing up and refusing to stream if hooked up to a
+machine with a UHCI controller.
+
+Namely, the cure is that if the camera is an mr97310a CIF type 1 camera, you
+have to send it 0xa0, 0x00. Somehow, this is a timing reset command, or
+such. It un-blocks whatever was previously stopping the CIF type 1 cameras
+from working on the UHCI-based machines.
+
+Signed-off-by: Theodore Kilgore <kilgota@auburn.edu>
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/media/video/gspca/mr97310a.c |    6 ++++++
+ 1 file changed, 6 insertions(+)
+
+--- a/drivers/media/video/gspca/mr97310a.c
++++ b/drivers/media/video/gspca/mr97310a.c
+@@ -697,6 +697,12 @@ static int start_cif_cam(struct gspca_de
+                       {0x13, 0x00, {0x01}, 1},
+                       {0, 0, {0}, 0}
+               };
++              /* Without this command the cam won't work with USB-UHCI */
++              gspca_dev->usb_buf[0] = 0x0a;
++              gspca_dev->usb_buf[1] = 0x00;
++              err_code = mr_write(gspca_dev, 2);
++              if (err_code < 0)
++                      return err_code;
+               err_code = sensor_write_regs(gspca_dev, cif_sensor1_init_data,
+                                        ARRAY_SIZE(cif_sensor1_init_data));
+       }
diff --git a/queue-2.6.33/vfs-take-f_lock-on-modifying-f_mode-after-open-time.patch b/queue-2.6.33/vfs-take-f_lock-on-modifying-f_mode-after-open-time.patch
new file mode 100644 (file)
index 0000000..fc71867
--- /dev/null
@@ -0,0 +1,50 @@
+From 42e49608683ab25fbbbf9c40edb944601e543882 Mon Sep 17 00:00:00 2001
+From: Wu Fengguang <fengguang.wu@intel.com>
+Date: Fri, 5 Mar 2010 13:42:01 -0800
+Subject: vfs: take f_lock on modifying f_mode after open time
+
+From: Wu Fengguang <fengguang.wu@intel.com>
+
+commit 42e49608683ab25fbbbf9c40edb944601e543882 upstream.
+
+We'll introduce FMODE_RANDOM which will be runtime modified.  So protect
+all runtime modification to f_mode with f_lock to avoid races.
+
+Signed-off-by: Wu Fengguang <fengguang.wu@intel.com>
+Cc: Al Viro <viro@zeniv.linux.org.uk>
+Cc: Christoph Hellwig <hch@infradead.org>
+Cc: Trond Myklebust <Trond.Myklebust@netapp.com>
+Cc: Chuck Lever <chuck.lever@oracle.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/file_table.c     |    2 ++
+ fs/nfsd/nfs4state.c |    2 ++
+ 2 files changed, 4 insertions(+)
+
+--- a/fs/file_table.c
++++ b/fs/file_table.c
+@@ -393,7 +393,9 @@ retry:
+                       continue;
+               if (!(f->f_mode & FMODE_WRITE))
+                       continue;
++              spin_lock(&f->f_lock);
+               f->f_mode &= ~FMODE_WRITE;
++              spin_unlock(&f->f_lock);
+               if (file_check_writeable(f) != 0)
+                       continue;
+               file_release_write(f);
+--- a/fs/nfsd/nfs4state.c
++++ b/fs/nfsd/nfs4state.c
+@@ -1998,7 +1998,9 @@ nfs4_file_downgrade(struct file *filp, u
+ {
+       if (share_access & NFS4_SHARE_ACCESS_WRITE) {
+               drop_file_write_access(filp);
++              spin_lock(&filp->f_lock);
+               filp->f_mode = (filp->f_mode | FMODE_READ) & ~FMODE_WRITE;
++              spin_unlock(&filp->f_lock);
+       }
+ }
diff --git a/queue-2.6.33/x86-uv-uv_global_gru_mmr_address-macro-fix.patch b/queue-2.6.33/x86-uv-uv_global_gru_mmr_address-macro-fix.patch
new file mode 100644 (file)
index 0000000..69516d5
--- /dev/null
@@ -0,0 +1,33 @@
+From e1e0138d7d10fd447c71cc70f367eac514bd3ce4 Mon Sep 17 00:00:00 2001
+From: Jack Steiner <steiner@sgi.com>
+Date: Thu, 7 Jan 2010 10:12:40 -0600
+Subject: x86, uv: uv_global_gru_mmr_address() macro fix
+
+From: Jack Steiner <steiner@sgi.com>
+
+commit e1e0138d7d10fd447c71cc70f367eac514bd3ce4 upstream.
+
+Fix bug in uv_global_gru_mmr_address macro.  Macro failed
+to cast an int value to a long prior to a left shift > 32.
+
+Signed-off-by: Jack Steiner <steiner@sgi.com>
+LKML-Reference: <20100107161240.GA2610@sgi.com>
+Signed-off-by: H. Peter Anvin <hpa@zytor.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86/include/asm/uv/uv_hub.h |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/arch/x86/include/asm/uv/uv_hub.h
++++ b/arch/x86/include/asm/uv/uv_hub.h
+@@ -329,7 +329,8 @@ static inline unsigned long uv_read_glob
+  */
+ static inline unsigned long uv_global_gru_mmr_address(int pnode, unsigned long offset)
+ {
+-      return UV_GLOBAL_GRU_MMR_BASE | offset | (pnode << uv_hub_info->m_val);
++      return UV_GLOBAL_GRU_MMR_BASE | offset |
++              ((unsigned long)pnode << uv_hub_info->m_val);
+ }
+ static inline void uv_write_global_mmr8(int pnode, unsigned long offset, unsigned char val)