From: Greg Kroah-Hartman Date: Mon, 8 Mar 2010 23:16:13 +0000 (-0800) Subject: .33 patches X-Git-Tag: v2.6.32.10~32 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e5e1559e661f572c9bda98a85ebd6e2ee2613621;p=thirdparty%2Fkernel%2Fstable-queue.git .33 patches --- 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 index 00000000000..ec4ec8d5c9d --- /dev/null +++ b/queue-2.6.33/airo-fix-setting-zero-length-wep-key.patch @@ -0,0 +1,84 @@ +From f09c256375c7cf1e112b8ef6306cdd313490d7c0 Mon Sep 17 00:00:00 2001 +From: Stanislaw Gruszka +Date: Tue, 2 Feb 2010 15:34:50 +0100 +Subject: airo: fix setting zero length WEP key + +From: Stanislaw Gruszka + +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 +Bisected-by: Chris Siebenmann +Tested-by: Chris Siebenmann +Cc: Dan Williams +Signed-off-by: Stanislaw Gruszka +Signed-off-by: John W. Linville +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..7f49f9376b0 --- /dev/null +++ b/queue-2.6.33/hid-remove-tenx-ibuddy-from-blacklist.patch @@ -0,0 +1,54 @@ +From 4bb9508bbbb06f10bc3e249dd34375b4a4d6bfc0 Mon Sep 17 00:00:00 2001 +From: Jiri Kosina +Date: Wed, 23 Dec 2009 14:13:46 +0100 +Subject: HID: remove TENX iBuddy from blacklist + +From: Jiri Kosina + +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 +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..7b70ee737f0 --- /dev/null +++ b/queue-2.6.33/hid-usbhid-introduce-timeout-for-stuck-ctrl-out-urbs.patch @@ -0,0 +1,102 @@ +From 858155fbcc0cd713f6382c527bb1c3abc0ed6d00 Mon Sep 17 00:00:00 2001 +From: Oliver Neukum +Date: Fri, 12 Feb 2010 13:02:28 +0100 +Subject: HID: usbhid: introduce timeout for stuck ctrl/out URBs + +From: Oliver Neukum + +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 +Signed-off-by: David Fries +Signed-off-by: Jiri Kosina +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..8d6bc48790f --- /dev/null +++ b/queue-2.6.33/mac80211-quit-addba_resp_timer-if-tx-ba-session-is-torn-down.patch @@ -0,0 +1,36 @@ +From 3dc1de0bf23816ed557ac8addf680cd5ee57e805 Mon Sep 17 00:00:00 2001 +From: Zhu Yi +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 + +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 +Acked-by: Johannes Berg +Signed-off-by: John W. Linville +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..d3f4d9411cf --- /dev/null +++ b/queue-2.6.33/mac80211-reset-dynamic-ps-timer-in-rx-path.patch @@ -0,0 +1,49 @@ +From e15276a4b220c54db665cf46a92bd9ceb9aeb052 Mon Sep 17 00:00:00 2001 +From: Vivek Natarajan +Date: Mon, 8 Feb 2010 17:47:01 +0530 +Subject: mac80211: Reset dynamic ps timer in Rx path. + +From: Vivek Natarajan + +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 +Signed-off-by: John W. Linville +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..c1f33cae3eb --- /dev/null +++ b/queue-2.6.33/mpt2sas-delete-volume-before-hba-detach.patch @@ -0,0 +1,59 @@ +From d7384b28afb2bf2b7be835ddc8c852bdc5e0ce1c Mon Sep 17 00:00:00 2001 +From: Kashyap, Desai +Date: Wed, 16 Dec 2009 18:50:06 +0530 +Subject: [SCSI] mpt2sas: Delete volume before HBA detach. + +From: Kashyap, Desai + +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 +Reviewed-by: Eric Moore +Signed-off-by: James Bottomley +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..beb527f1d3c --- /dev/null +++ b/queue-2.6.33/readahead-introduce-fmode_random-for-posix_fadv_random.patch @@ -0,0 +1,105 @@ +From 0141450f66c3c12a3aaa869748caa64241885cdf Mon Sep 17 00:00:00 2001 +From: Wu Fengguang +Date: Fri, 5 Mar 2010 13:42:03 -0800 +Subject: readahead: introduce FMODE_RANDOM for POSIX_FADV_RANDOM + +From: Wu Fengguang + +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 +Signed-off-by: Wu Fengguang +Cc: Nick Piggin +Cc: Andi Kleen +Cc: Steven Whitehouse +Cc: David Howells +Cc: Jonathan Corbet +Cc: Al Viro +Cc: Christoph Hellwig +Cc: Trond Myklebust +Cc: Chuck Lever +Cc: +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + 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); + } diff --git a/queue-2.6.33/series b/queue-2.6.33/series index d51fe28c8c2..4645bf68a37 100644 --- a/queue-2.6.33/series +++ b/queue-2.6.33/series @@ -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 index 00000000000..ce4e35e372f --- /dev/null +++ b/queue-2.6.33/slab-initialize-unused-alien-cache-entry-as-null-at-alloc_alien_cache.patch @@ -0,0 +1,42 @@ +From f3186a9c51eabe75b2780153ed7f07778d78b16e Mon Sep 17 00:00:00 2001 +From: Haicheng Li +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 + +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 +Acked-by: Andi Kleen +Acked-by: Christoph Lameter +Acked-by: Matt Mackall +Signed-off-by: Haicheng Li +Signed-off-by: Pekka Enberg +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..d4bb77c82a4 --- /dev/null +++ b/queue-2.6.33/v4l-dvb-13991-gspca_mr973010a-fix-cif-type-1-cameras-not-streaming-on-uhci-controllers.patch @@ -0,0 +1,43 @@ +From 70136081fc67ea77d849f86fa323e5773c8e40ea Mon Sep 17 00:00:00 2001 +From: Theodore Kilgore +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 + +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 +Signed-off-by: Hans de Goede +Signed-off-by: Mauro Carvalho Chehab +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..fc71867bdbf --- /dev/null +++ b/queue-2.6.33/vfs-take-f_lock-on-modifying-f_mode-after-open-time.patch @@ -0,0 +1,50 @@ +From 42e49608683ab25fbbbf9c40edb944601e543882 Mon Sep 17 00:00:00 2001 +From: Wu Fengguang +Date: Fri, 5 Mar 2010 13:42:01 -0800 +Subject: vfs: take f_lock on modifying f_mode after open time + +From: Wu Fengguang + +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 +Cc: Al Viro +Cc: Christoph Hellwig +Cc: Trond Myklebust +Cc: Chuck Lever +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..69516d59174 --- /dev/null +++ b/queue-2.6.33/x86-uv-uv_global_gru_mmr_address-macro-fix.patch @@ -0,0 +1,33 @@ +From e1e0138d7d10fd447c71cc70f367eac514bd3ce4 Mon Sep 17 00:00:00 2001 +From: Jack Steiner +Date: Thu, 7 Jan 2010 10:12:40 -0600 +Subject: x86, uv: uv_global_gru_mmr_address() macro fix + +From: Jack Steiner + +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 +LKML-Reference: <20100107161240.GA2610@sgi.com> +Signed-off-by: H. Peter Anvin +Signed-off-by: Greg Kroah-Hartman + +--- + 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)