[kernel] r18461 - in dists/squeeze/linux-2.6/debian: . patches/bugfix/all/stable patches/series

Ben Hutchings benh at alioth.debian.org
Sun Jan 8 03:28:09 UTC 2012


Author: benh
Date: Sun Jan  8 03:28:07 2012
New Revision: 18461

Log:
Add longterm releases 2.6.32.{52,53}

Added:
   dists/squeeze/linux-2.6/debian/patches/bugfix/all/stable/2.6.32.52.patch
   dists/squeeze/linux-2.6/debian/patches/bugfix/all/stable/2.6.32.53.patch
Modified:
   dists/squeeze/linux-2.6/debian/changelog
   dists/squeeze/linux-2.6/debian/patches/series/41

Modified: dists/squeeze/linux-2.6/debian/changelog
==============================================================================
--- dists/squeeze/linux-2.6/debian/changelog	Sun Jan  8 01:52:10 2012	(r18460)
+++ dists/squeeze/linux-2.6/debian/changelog	Sun Jan  8 03:28:07 2012	(r18461)
@@ -3,6 +3,14 @@
   [ Ben Hutchings ]
   * ipv6: make fragment identifications less predictable (CVE-2011-2699)
     - fix NULL dereference in udp6_ufo_fragment (see #643817)
+  * Add longterm release 2.6.32.52:
+    - Revert "clockevents: Set noop handler in clockevents_exchange_device()",
+      included in stable update 2.6.32.50 (Closes: #653398)
+  * Add longterm release 2.6.32.53, including:
+    - cfq-iosched: fix cfq_cic_link() race confition
+    For the complete list of changes, see:
+     http://www.kernel.org/pub/linux/kernel/v2.6/longterm/ChangeLog-2.6.32.53
+    and the bug report which this closes: #655049.
 
  -- Ben Hutchings <ben at decadent.org.uk>  Wed, 28 Dec 2011 20:04:56 +0100
 

Added: dists/squeeze/linux-2.6/debian/patches/bugfix/all/stable/2.6.32.52.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/squeeze/linux-2.6/debian/patches/bugfix/all/stable/2.6.32.52.patch	Sun Jan  8 03:28:07 2012	(r18461)
@@ -0,0 +1,14 @@
+diff --git a/Makefile b/Makefile
+index 1c640ea..8f775f5 100644
+diff --git a/kernel/time/clockevents.c b/kernel/time/clockevents.c
+index b38baff..0d809ae 100644
+--- a/kernel/time/clockevents.c
++++ b/kernel/time/clockevents.c
+@@ -221,7 +221,6 @@ void clockevents_exchange_device(struct clock_event_device *old,
+ 	 * released list and do a notify add later.
+ 	 */
+ 	if (old) {
+-		old->event_handler = clockevents_handle_noop;
+ 		clockevents_set_mode(old, CLOCK_EVT_MODE_UNUSED);
+ 		list_del(&old->list);
+ 		list_add(&old->list, &clockevents_released);

Added: dists/squeeze/linux-2.6/debian/patches/bugfix/all/stable/2.6.32.53.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/squeeze/linux-2.6/debian/patches/bugfix/all/stable/2.6.32.53.patch	Sun Jan  8 03:28:07 2012	(r18461)
@@ -0,0 +1,202 @@
+diff --git a/Makefile b/Makefile
+index 8f775f5..8472e43 100644
+diff --git a/arch/arm/plat-mxc/pwm.c b/arch/arm/plat-mxc/pwm.c
+index 5cdbd60..1640486 100644
+--- a/arch/arm/plat-mxc/pwm.c
++++ b/arch/arm/plat-mxc/pwm.c
+@@ -31,6 +31,9 @@
+ #define MX3_PWMSAR                0x0C    /* PWM Sample Register */
+ #define MX3_PWMPR                 0x10    /* PWM Period Register */
+ #define MX3_PWMCR_PRESCALER(x)    (((x - 1) & 0xFFF) << 4)
++#define MX3_PWMCR_DOZEEN                (1 << 24)
++#define MX3_PWMCR_WAITEN                (1 << 23)
++#define MX3_PWMCR_DBGEN			(1 << 22)
+ #define MX3_PWMCR_CLKSRC_IPG_HIGH (2 << 16)
+ #define MX3_PWMCR_CLKSRC_IPG      (1 << 16)
+ #define MX3_PWMCR_EN              (1 << 0)
+@@ -73,10 +76,21 @@ int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns)
+ 		do_div(c, period_ns);
+ 		duty_cycles = c;
+ 
++		/*
++		 * according to imx pwm RM, the real period value should be
++		 * PERIOD value in PWMPR plus 2.
++		 */
++		if (period_cycles > 2)
++			period_cycles -= 2;
++		else
++			period_cycles = 0;
++
+ 		writel(duty_cycles, pwm->mmio_base + MX3_PWMSAR);
+ 		writel(period_cycles, pwm->mmio_base + MX3_PWMPR);
+ 
+-		cr = MX3_PWMCR_PRESCALER(prescale) | MX3_PWMCR_EN;
++		cr = MX3_PWMCR_PRESCALER(prescale) |
++			MX3_PWMCR_DOZEEN | MX3_PWMCR_WAITEN |
++			MX3_PWMCR_DBGEN | MX3_PWMCR_EN;
+ 
+ 		if (cpu_is_mx25())
+ 			cr |= MX3_PWMCR_CLKSRC_IPG;
+diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c
+index 1c9fba6..e5c77d8 100644
+--- a/block/cfq-iosched.c
++++ b/block/cfq-iosched.c
+@@ -1981,7 +1981,7 @@ static int cfq_cic_link(struct cfq_data *cfqd, struct io_context *ioc,
+ 		}
+ 	}
+ 
+-	if (ret)
++	if (ret && ret != -EEXIST)
+ 		printk(KERN_ERR "cfq: cic link failed!\n");
+ 
+ 	return ret;
+@@ -1997,6 +1997,7 @@ cfq_get_io_context(struct cfq_data *cfqd, gfp_t gfp_mask)
+ {
+ 	struct io_context *ioc = NULL;
+ 	struct cfq_io_context *cic;
++	int ret;
+ 
+ 	might_sleep_if(gfp_mask & __GFP_WAIT);
+ 
+@@ -2004,6 +2005,7 @@ cfq_get_io_context(struct cfq_data *cfqd, gfp_t gfp_mask)
+ 	if (!ioc)
+ 		return NULL;
+ 
++retry:
+ 	cic = cfq_cic_lookup(cfqd, ioc);
+ 	if (cic)
+ 		goto out;
+@@ -2012,7 +2014,12 @@ cfq_get_io_context(struct cfq_data *cfqd, gfp_t gfp_mask)
+ 	if (cic == NULL)
+ 		goto err;
+ 
+-	if (cfq_cic_link(cfqd, ioc, cic, gfp_mask))
++	ret = cfq_cic_link(cfqd, ioc, cic, gfp_mask);
++	if (ret == -EEXIST) {
++		/* someone has linked cic to ioc already */
++		cfq_cic_free(cic);
++		goto retry;
++	} else if (ret)
+ 		goto err_free;
+ 
+ out:
+diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c
+index 705a589..68d800f 100644
+--- a/drivers/mmc/host/mmci.c
++++ b/drivers/mmc/host/mmci.c
+@@ -232,8 +232,12 @@ mmci_cmd_irq(struct mmci_host *host, struct mmc_command *cmd,
+ 	}
+ 
+ 	if (!cmd->data || cmd->error) {
+-		if (host->data)
++		if (host->data) {
++			/* Terminate the DMA transfer */
++			if (dma_inprogress(host))
++				mmci_dma_data_error(host);
+ 			mmci_stop_data(host);
++		}
+ 		mmci_request_end(host, cmd->mrq);
+ 	} else if (!(cmd->data->flags & MMC_DATA_READ)) {
+ 		mmci_start_data(host, cmd->data);
+diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
+index 54e716a..31be89b 100644
+--- a/drivers/net/wireless/ath/ath9k/main.c
++++ b/drivers/net/wireless/ath/ath9k/main.c
+@@ -2472,6 +2472,9 @@ static void ath9k_sta_notify(struct ieee80211_hw *hw,
+ 	struct ath_wiphy *aphy = hw->priv;
+ 	struct ath_softc *sc = aphy->sc;
+ 
++	if (!(sc->sc_flags & SC_OP_TXAGGR))
++		return;
++
+ 	switch (cmd) {
+ 	case STA_NOTIFY_ADD:
+ 		ath_node_attach(sc, sta);
+diff --git a/drivers/scsi/mpt2sas/mpt2sas_scsih.c b/drivers/scsi/mpt2sas/mpt2sas_scsih.c
+index cb972b6..11253d9 100644
+--- a/drivers/scsi/mpt2sas/mpt2sas_scsih.c
++++ b/drivers/scsi/mpt2sas/mpt2sas_scsih.c
+@@ -3145,7 +3145,7 @@ _scsih_smart_predicted_fault(struct MPT2SAS_ADAPTER *ioc, u16 handle)
+ 	/* insert into event log */
+ 	sz = offsetof(Mpi2EventNotificationReply_t, EventData) +
+ 	     sizeof(Mpi2EventDataSasDeviceStatusChange_t);
+-	event_reply = kzalloc(sz, GFP_KERNEL);
++	event_reply = kzalloc(sz, GFP_ATOMIC);
+ 	if (!event_reply) {
+ 		printk(MPT2SAS_ERR_FMT "failure at %s:%d/%s()!\n",
+ 		    ioc->name, __FILE__, __LINE__, __func__);
+diff --git a/drivers/watchdog/hpwdt.c b/drivers/watchdog/hpwdt.c
+index 0b91907..2a9f54a 100644
+--- a/drivers/watchdog/hpwdt.c
++++ b/drivers/watchdog/hpwdt.c
+@@ -220,6 +220,7 @@ static int __devinit cru_detect(unsigned long map_entry,
+ 
+ 	cmn_regs.u1.reax = CRU_BIOS_SIGNATURE_VALUE;
+ 
++	set_memory_x((unsigned long)bios32_entrypoint, (2 * PAGE_SIZE));
+ 	asminline_call(&cmn_regs, bios32_entrypoint);
+ 
+ 	if (cmn_regs.u1.ral != 0) {
+@@ -237,8 +238,10 @@ static int __devinit cru_detect(unsigned long map_entry,
+ 		if ((physical_bios_base + physical_bios_offset)) {
+ 			cru_rom_addr =
+ 				ioremap(cru_physical_address, cru_length);
+-			if (cru_rom_addr)
++			if (cru_rom_addr) {
++				set_memory_x((unsigned long)cru_rom_addr, cru_length);
+ 				retval = 0;
++			}
+ 		}
+ 
+ 		printk(KERN_DEBUG "hpwdt: CRU Base Address:   0x%lx\n",
+diff --git a/kernel/hung_task.c b/kernel/hung_task.c
+index d4e84174..07187ae 100644
+--- a/kernel/hung_task.c
++++ b/kernel/hung_task.c
+@@ -74,11 +74,17 @@ static void check_hung_task(struct task_struct *t, unsigned long timeout)
+ 
+ 	/*
+ 	 * Ensure the task is not frozen.
+-	 * Also, when a freshly created task is scheduled once, changes
+-	 * its state to TASK_UNINTERRUPTIBLE without having ever been
+-	 * switched out once, it musn't be checked.
++	 * Also, skip vfork and any other user process that freezer should skip.
+ 	 */
+-	if (unlikely(t->flags & PF_FROZEN || !switch_count))
++	if (unlikely(t->flags & (PF_FROZEN | PF_FREEZER_SKIP)))
++	    return;
++
++	/*
++	 * When a freshly created task is scheduled once, changes its state to
++	 * TASK_UNINTERRUPTIBLE without having ever been switched out once, it
++	 * musn't be checked.
++	 */
++	if (unlikely(!switch_count))
+ 		return;
+ 
+ 	if (switch_count != t->last_switch_count) {
+diff --git a/mm/filemap.c b/mm/filemap.c
+index 9e0826e..a1fe378 100644
+--- a/mm/filemap.c
++++ b/mm/filemap.c
+@@ -1675,7 +1675,7 @@ repeat:
+ 		page = __page_cache_alloc(gfp | __GFP_COLD);
+ 		if (!page)
+ 			return ERR_PTR(-ENOMEM);
+-		err = add_to_page_cache_lru(page, mapping, index, GFP_KERNEL);
++		err = add_to_page_cache_lru(page, mapping, index, gfp);
+ 		if (unlikely(err)) {
+ 			page_cache_release(page);
+ 			if (err == -EEXIST)
+@@ -1772,10 +1772,7 @@ static struct page *wait_on_page_read(struct page *page)
+  * @gfp:	the page allocator flags to use if allocating
+  *
+  * This is the same as "read_mapping_page(mapping, index, NULL)", but with
+- * any new page allocations done using the specified allocation flags. Note
+- * that the Radix tree operations will still use GFP_KERNEL, so you can't
+- * expect to do this atomically or anything like that - but you can pass in
+- * other page requirements.
++ * any new page allocations done using the specified allocation flags.
+  *
+  * If the page does not get brought uptodate, return -EIO.
+  */

Modified: dists/squeeze/linux-2.6/debian/patches/series/41
==============================================================================
--- dists/squeeze/linux-2.6/debian/patches/series/41	Sun Jan  8 01:52:10 2012	(r18460)
+++ dists/squeeze/linux-2.6/debian/patches/series/41	Sun Jan  8 03:28:07 2012	(r18461)
@@ -1,2 +1,4 @@
 + bugfix/all/ipv6-make-fragment-identifications-less-predictable.patch
 + bugfix/all/ipv6-fix-NULL-dereference-in-udp6_ufo_fragment.patch
++ bugfix/all/stable/2.6.32.52.patch
++ bugfix/all/stable/2.6.32.53.patch



More information about the Kernel-svn-changes mailing list