From: Greg Kroah-Hartman Date: Thu, 22 Dec 2011 18:42:32 +0000 (-0800) Subject: 3.1 patches X-Git-Tag: v3.0.15~11 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3ac8b5bfc60593590e8f009d63819163a4c5f5bd;p=thirdparty%2Fkernel%2Fstable-queue.git 3.1 patches added patches: alsa-hda-set-position-fix-to-lpib-for-an-atom-poulsbo-based-device.patch arm-omap-rx51-fix-usb.patch cfq-iosched-fix-cfq_cic_link-race-confition.patch cfq-iosched-free-cic_index-if-blkio_alloc_blkg_stats-fails.patch drm-i915-prevent-division-by-zero-when-asking-for-chipset-power.patch drm-i915-set-the-right-sdvo-transcoder-for-cpt.patch ipip-sit-copy-parms.name-after-register_netdevice.patch rtc-expire-alarms-after-the-time-is-set.patch rtc-m41t80-workaround-broken-alarm-functionality.patch --- diff --git a/queue-3.1/alsa-hda-set-position-fix-to-lpib-for-an-atom-poulsbo-based-device.patch b/queue-3.1/alsa-hda-set-position-fix-to-lpib-for-an-atom-poulsbo-based-device.patch new file mode 100644 index 00000000000..db7864e7ddd --- /dev/null +++ b/queue-3.1/alsa-hda-set-position-fix-to-lpib-for-an-atom-poulsbo-based-device.patch @@ -0,0 +1,38 @@ +From 1c89fe3b51a2f8068f2f9faa9c48584151416583 Mon Sep 17 00:00:00 2001 +From: David Henningsson +Date: Mon, 12 Dec 2011 14:01:17 +0800 +Subject: ALSA: HDA: Set position fix to LPIB for an Atom/Poulsbo based device + +From: David Henningsson + +commit 1c89fe3b51a2f8068f2f9faa9c48584151416583 upstream. + +For the Asus 1101HA, reporting position by reading the DMA position +buffer map seems unstable and often wrong. The reporter says that +position_fix=LPIB works much better (although not 100%, but this is +probably due to other issues). + +The controller chip is an Intel Poulsbo 8086:811b (rev 07) controller, +and complete alsa-info is available here: +https://launchpadlibrarian.net/86691768/alsa-info.txt.1TNwyE5Ea7 + +BugLink: http://bugs.launchpad.net/bugs/825709 +Tested-by: Stefano Lodi +Signed-off-by: David Henningsson +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + sound/pci/hda/hda_intel.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/sound/pci/hda/hda_intel.c ++++ b/sound/pci/hda/hda_intel.c +@@ -2375,6 +2375,7 @@ static struct snd_pci_quirk position_fix + SND_PCI_QUIRK(0x1043, 0x813d, "ASUS P5AD2", POS_FIX_LPIB), + SND_PCI_QUIRK(0x1043, 0x81b3, "ASUS", POS_FIX_LPIB), + SND_PCI_QUIRK(0x1043, 0x81e7, "ASUS M2V", POS_FIX_LPIB), ++ SND_PCI_QUIRK(0x1043, 0x83ce, "ASUS 1101HA", POS_FIX_LPIB), + SND_PCI_QUIRK(0x104d, 0x9069, "Sony VPCS11V9E", POS_FIX_LPIB), + SND_PCI_QUIRK(0x1106, 0x3288, "ASUS M2V-MX SE", POS_FIX_LPIB), + SND_PCI_QUIRK(0x1297, 0x3166, "Shuttle", POS_FIX_LPIB), diff --git a/queue-3.1/arm-omap-rx51-fix-usb.patch b/queue-3.1/arm-omap-rx51-fix-usb.patch new file mode 100644 index 00000000000..d3fe6969b66 --- /dev/null +++ b/queue-3.1/arm-omap-rx51-fix-usb.patch @@ -0,0 +1,39 @@ +From e5fe29c7198a1f6616286dfc8602a69da165cb3f Mon Sep 17 00:00:00 2001 +From: Felipe Contreras +Date: Thu, 8 Dec 2011 22:23:00 +0200 +Subject: ARM: OMAP: rx51: fix USB + +From: Felipe Contreras + +commit e5fe29c7198a1f6616286dfc8602a69da165cb3f upstream. + +Commit 10299e2e4e3ed3b16503d4e04edd48b33083f4e2 (ARM: RX-51: +Enable isp1704 power on/off) added power management for isp1704. + +However, the transceiver should be powered on by default, +otherwise USB doesn't work at all for networking during +boot. + +All kernels after v3.0 are affected. + +Signed-off-by: Felipe Contreras +Reviewed-by: Sebastian Reichel +[tony@atomide.com: updated comments] +Signed-off-by: Tony Lindgren +Signed-off-by: Greg Kroah-Hartman + +--- + arch/arm/mach-omap2/board-rx51-peripherals.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/arch/arm/mach-omap2/board-rx51-peripherals.c ++++ b/arch/arm/mach-omap2/board-rx51-peripherals.c +@@ -193,7 +193,7 @@ static struct platform_device rx51_charg + static void __init rx51_charger_init(void) + { + WARN_ON(gpio_request_one(RX51_USB_TRANSCEIVER_RST_GPIO, +- GPIOF_OUT_INIT_LOW, "isp1704_reset")); ++ GPIOF_OUT_INIT_HIGH, "isp1704_reset")); + + platform_device_register(&rx51_charger_device); + } diff --git a/queue-3.1/cfq-iosched-fix-cfq_cic_link-race-confition.patch b/queue-3.1/cfq-iosched-fix-cfq_cic_link-race-confition.patch new file mode 100644 index 00000000000..1641659a9c0 --- /dev/null +++ b/queue-3.1/cfq-iosched-fix-cfq_cic_link-race-confition.patch @@ -0,0 +1,88 @@ +From 5eb46851de3904cd1be9192fdacb8d34deadc1fc Mon Sep 17 00:00:00 2001 +From: Yasuaki Ishimatsu +Date: Fri, 2 Dec 2011 10:07:07 +0100 +Subject: cfq-iosched: fix cfq_cic_link() race confition + +From: Yasuaki Ishimatsu + +commit 5eb46851de3904cd1be9192fdacb8d34deadc1fc upstream. + +cfq_cic_link() has race condition. When some processes which shared ioc +issue I/O to same block device simultaneously, cfq_cic_link() returns -EEXIST +sometimes. The race condition might stop I/O by following steps: + +step 1: Process A: Issue an I/O to /dev/sda +step 2: Process A: Get an ioc (iocA here) in get_io_context() which does not + linked with a cic for the device +step 3: Process A: Get a new cic for the device (cicA here) in + cfq_alloc_io_context() + +step 4: Process B: Issue an I/O to /dev/sda +step 5: Process B: Get iocA in get_io_context() since process A and B share the + same ioc +step 6: Process B: Get a new cic for the device (cicB here) in + cfq_alloc_io_context() since iocA has not been linked with a + cic for the device yet + +step 7: Process A: Link cicA to iocA in cfq_cic_link() +step 8: Process A: Dispatch I/O to driver and finish it + +step 9: Process B: Try to link cicB to iocA in cfq_cic_link() + But it fails with showing "cfq: cic link failed!" kernel + message, since iocA has already linked with cicA at step 7. +step 10: Process B: Wait for finishig I/O in get_request_wait() + The function does not wake up, when there is no I/O to the + device. + +When cfq_cic_link() returns -EEXIST, it means ioc has already linked with cic. +So when cfq_cic_link() return -EEXIST, retry cfq_cic_lookup(). + +Signed-off-by: Yasuaki Ishimatsu +Signed-off-by: Jens Axboe +Signed-off-by: Greg Kroah-Hartman + +--- + block/cfq-iosched.c | 11 +++++++++-- + 1 file changed, 9 insertions(+), 2 deletions(-) + +--- a/block/cfq-iosched.c ++++ b/block/cfq-iosched.c +@@ -3184,7 +3184,7 @@ static int cfq_cic_link(struct cfq_data + } + } + +- if (ret) ++ if (ret && ret != -EEXIST) + printk(KERN_ERR "cfq: cic link failed!\n"); + + return ret; +@@ -3200,6 +3200,7 @@ cfq_get_io_context(struct cfq_data *cfqd + { + struct io_context *ioc = NULL; + struct cfq_io_context *cic; ++ int ret; + + might_sleep_if(gfp_mask & __GFP_WAIT); + +@@ -3207,6 +3208,7 @@ cfq_get_io_context(struct cfq_data *cfqd + if (!ioc) + return NULL; + ++retry: + cic = cfq_cic_lookup(cfqd, ioc); + if (cic) + goto out; +@@ -3215,7 +3217,12 @@ cfq_get_io_context(struct cfq_data *cfqd + 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/queue-3.1/cfq-iosched-free-cic_index-if-blkio_alloc_blkg_stats-fails.patch b/queue-3.1/cfq-iosched-free-cic_index-if-blkio_alloc_blkg_stats-fails.patch new file mode 100644 index 00000000000..1fa0ad54efe --- /dev/null +++ b/queue-3.1/cfq-iosched-free-cic_index-if-blkio_alloc_blkg_stats-fails.patch @@ -0,0 +1,34 @@ +From 2984ff38ccf6cbc02a7a996a36c7d6f69f3c6146 Mon Sep 17 00:00:00 2001 +From: majianpeng +Date: Wed, 30 Nov 2011 15:47:48 +0100 +Subject: cfq-iosched: free cic_index if blkio_alloc_blkg_stats fails + +From: majianpeng + +commit 2984ff38ccf6cbc02a7a996a36c7d6f69f3c6146 upstream. + +If we fail allocating the blkpg stats, we free cfqd and cfgq. +But we need to free the IDA cfqd->cic_index as well. + +Signed-off-by: majianpeng +Signed-off-by: Jens Axboe +Signed-off-by: Greg Kroah-Hartman + +--- + block/cfq-iosched.c | 5 +++++ + 1 file changed, 5 insertions(+) + +--- a/block/cfq-iosched.c ++++ b/block/cfq-iosched.c +@@ -4036,6 +4036,11 @@ static void *cfq_init_queue(struct reque + + if (blkio_alloc_blkg_stats(&cfqg->blkg)) { + kfree(cfqg); ++ ++ spin_lock(&cic_index_lock); ++ ida_remove(&cic_index_ida, cfqd->cic_index); ++ spin_unlock(&cic_index_lock); ++ + kfree(cfqd); + return NULL; + } diff --git a/queue-3.1/drm-i915-prevent-division-by-zero-when-asking-for-chipset-power.patch b/queue-3.1/drm-i915-prevent-division-by-zero-when-asking-for-chipset-power.patch new file mode 100644 index 00000000000..60e6c28d38b --- /dev/null +++ b/queue-3.1/drm-i915-prevent-division-by-zero-when-asking-for-chipset-power.patch @@ -0,0 +1,71 @@ +From 4ed0b577457eb6aeb7cdc7e7316576e63d15abb2 Mon Sep 17 00:00:00 2001 +From: Eugeni Dodonov +Date: Thu, 10 Nov 2011 13:55:15 -0200 +Subject: drm/i915: prevent division by zero when asking for chipset power + +From: Eugeni Dodonov + +commit 4ed0b577457eb6aeb7cdc7e7316576e63d15abb2 upstream. + +This prevents an in-kernel division by zero which happens when we are +asking for i915_chipset_val too quickly, or within a race condition +between the power monitoring thread and userspace accesses via debugfs. + +The issue can be reproduced easily via the following command: +while ``; do cat /sys/kernel/debug/dri/0/i915_emon_status; done + +This is particularly dangerous because it can be triggered by +a non-privileged user by just reading the debugfs entry. + +This issue was also found independently by Konstantin Belousov +, who proposed a similar patch. + +Reported-by: Konstantin Belousov +Acked-by: Jesse Barnes +Acked-by: Keith Packard +Reviewed-by: Chris Wilson +Signed-off-by: Eugeni Dodonov +Signed-off-by: Keith Packard +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/i915/i915_dma.c | 10 ++++++++++ + drivers/gpu/drm/i915/i915_drv.h | 1 + + 2 files changed, 11 insertions(+) + +--- a/drivers/gpu/drm/i915/i915_dma.c ++++ b/drivers/gpu/drm/i915/i915_dma.c +@@ -1453,6 +1453,14 @@ unsigned long i915_chipset_val(struct dr + + diff1 = now - dev_priv->last_time1; + ++ /* Prevent division-by-zero if we are asking too fast. ++ * Also, we don't get interesting results if we are polling ++ * faster than once in 10ms, so just return the saved value ++ * in such cases. ++ */ ++ if (diff1 <= 10) ++ return dev_priv->chipset_power; ++ + count1 = I915_READ(DMIEC); + count2 = I915_READ(DDREC); + count3 = I915_READ(CSIEC); +@@ -1483,6 +1491,8 @@ unsigned long i915_chipset_val(struct dr + dev_priv->last_count1 = total_count; + dev_priv->last_time1 = now; + ++ dev_priv->chipset_power = ret; ++ + return ret; + } + +--- a/drivers/gpu/drm/i915/i915_drv.h ++++ b/drivers/gpu/drm/i915/i915_drv.h +@@ -707,6 +707,7 @@ typedef struct drm_i915_private { + + u64 last_count1; + unsigned long last_time1; ++ unsigned long chipset_power; + u64 last_count2; + struct timespec last_time2; + unsigned long gfx_power; diff --git a/queue-3.1/drm-i915-set-the-right-sdvo-transcoder-for-cpt.patch b/queue-3.1/drm-i915-set-the-right-sdvo-transcoder-for-cpt.patch new file mode 100644 index 00000000000..e4d0482411e --- /dev/null +++ b/queue-3.1/drm-i915-set-the-right-sdvo-transcoder-for-cpt.patch @@ -0,0 +1,57 @@ +From 3573c4103f7a486838bb6b5b8353788103f91802 Mon Sep 17 00:00:00 2001 +From: Paulo Zanoni +Date: Fri, 14 Oct 2011 18:16:22 -0300 +Subject: drm/i915: set the right SDVO transcoder for CPT + +From: Paulo Zanoni + +commit 3573c4103f7a486838bb6b5b8353788103f91802 upstream. + +v2: add a CPT-specific macro, make code cleaner +v3: fix commit message + +Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=41272 +Signed-off-by: Paulo Zanoni +Reviewed-by: Chris Wilson +Signed-off-by: Keith Packard +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/i915/i915_reg.h | 8 ++++---- + drivers/gpu/drm/i915/intel_sdvo.c | 8 ++++++-- + 2 files changed, 10 insertions(+), 6 deletions(-) + +--- a/drivers/gpu/drm/i915/i915_reg.h ++++ b/drivers/gpu/drm/i915/i915_reg.h +@@ -3271,10 +3271,10 @@ + /* or SDVOB */ + #define HDMIB 0xe1140 + #define PORT_ENABLE (1 << 31) +-#define TRANSCODER_A (0) +-#define TRANSCODER_B (1 << 30) +-#define TRANSCODER(pipe) ((pipe) << 30) +-#define TRANSCODER_MASK (1 << 30) ++#define TRANSCODER(pipe) ((pipe) << 30) ++#define TRANSCODER_CPT(pipe) ((pipe) << 29) ++#define TRANSCODER_MASK (1 << 30) ++#define TRANSCODER_MASK_CPT (3 << 29) + #define COLOR_FORMAT_8bpc (0) + #define COLOR_FORMAT_12bpc (3 << 26) + #define SDVOB_HOTPLUG_ENABLE (1 << 23) +--- a/drivers/gpu/drm/i915/intel_sdvo.c ++++ b/drivers/gpu/drm/i915/intel_sdvo.c +@@ -1085,8 +1085,12 @@ static void intel_sdvo_mode_set(struct d + } + sdvox |= (9 << 19) | SDVO_BORDER_ENABLE; + } +- if (intel_crtc->pipe == 1) +- sdvox |= SDVO_PIPE_B_SELECT; ++ ++ if (INTEL_PCH_TYPE(dev) >= PCH_CPT) ++ sdvox |= TRANSCODER_CPT(intel_crtc->pipe); ++ else ++ sdvox |= TRANSCODER(intel_crtc->pipe); ++ + if (intel_sdvo->has_hdmi_audio) + sdvox |= SDVO_AUDIO_ENABLE; + diff --git a/queue-3.1/ipip-sit-copy-parms.name-after-register_netdevice.patch b/queue-3.1/ipip-sit-copy-parms.name-after-register_netdevice.patch new file mode 100644 index 00000000000..3f363a1aedb --- /dev/null +++ b/queue-3.1/ipip-sit-copy-parms.name-after-register_netdevice.patch @@ -0,0 +1,111 @@ +From 72b36015ba43a3cca5303f5534d2c3e1899eae29 Mon Sep 17 00:00:00 2001 +From: Ted Feng +Date: Thu, 8 Dec 2011 00:46:21 +0000 +Subject: ipip, sit: copy parms.name after register_netdevice + +From: Ted Feng + +commit 72b36015ba43a3cca5303f5534d2c3e1899eae29 upstream. + +Same fix as 731abb9cb2 for ipip and sit tunnel. +Commit 1c5cae815d removed an explicit call to dev_alloc_name in +ipip_tunnel_locate and ipip6_tunnel_locate, because register_netdevice +will now create a valid name, however the tunnel keeps a copy of the +name in the private parms structure. Fix this by copying the name back +after register_netdevice has successfully returned. + +This shows up if you do a simple tunnel add, followed by a tunnel show: + +$ sudo ip tunnel add mode ipip remote 10.2.20.211 +$ ip tunnel +tunl0: ip/ip remote any local any ttl inherit nopmtudisc +tunl%d: ip/ip remote 10.2.20.211 local any ttl inherit +$ sudo ip tunnel add mode sit remote 10.2.20.212 +$ ip tunnel +sit0: ipv6/ip remote any local any ttl 64 nopmtudisc 6rd-prefix 2002::/16 +sit%d: ioctl 89f8 failed: No such device +sit%d: ipv6/ip remote 10.2.20.212 local any ttl inherit + +Signed-off-by: Ted Feng +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + net/ipv4/ipip.c | 7 ++++++- + net/ipv6/sit.c | 7 ++++++- + 2 files changed, 12 insertions(+), 2 deletions(-) + +--- a/net/ipv4/ipip.c ++++ b/net/ipv4/ipip.c +@@ -285,6 +285,8 @@ static struct ip_tunnel * ipip_tunnel_lo + if (register_netdevice(dev) < 0) + goto failed_free; + ++ strcpy(nt->parms.name, dev->name); ++ + dev_hold(dev); + ipip_tunnel_link(ipn, nt); + return nt; +@@ -759,7 +761,6 @@ static int ipip_tunnel_init(struct net_d + struct ip_tunnel *tunnel = netdev_priv(dev); + + tunnel->dev = dev; +- strcpy(tunnel->parms.name, dev->name); + + memcpy(dev->dev_addr, &tunnel->parms.iph.saddr, 4); + memcpy(dev->broadcast, &tunnel->parms.iph.daddr, 4); +@@ -825,6 +826,7 @@ static void ipip_destroy_tunnels(struct + static int __net_init ipip_init_net(struct net *net) + { + struct ipip_net *ipn = net_generic(net, ipip_net_id); ++ struct ip_tunnel *t; + int err; + + ipn->tunnels[0] = ipn->tunnels_wc; +@@ -848,6 +850,9 @@ static int __net_init ipip_init_net(stru + if ((err = register_netdev(ipn->fb_tunnel_dev))) + goto err_reg_dev; + ++ t = netdev_priv(ipn->fb_tunnel_dev); ++ ++ strcpy(t->parms.name, ipn->fb_tunnel_dev->name); + return 0; + + err_reg_dev: +--- a/net/ipv6/sit.c ++++ b/net/ipv6/sit.c +@@ -263,6 +263,8 @@ static struct ip_tunnel *ipip6_tunnel_lo + if (register_netdevice(dev) < 0) + goto failed_free; + ++ strcpy(nt->parms.name, dev->name); ++ + dev_hold(dev); + + ipip6_tunnel_link(sitn, nt); +@@ -1144,7 +1146,6 @@ static int ipip6_tunnel_init(struct net_ + struct ip_tunnel *tunnel = netdev_priv(dev); + + tunnel->dev = dev; +- strcpy(tunnel->parms.name, dev->name); + + memcpy(dev->dev_addr, &tunnel->parms.iph.saddr, 4); + memcpy(dev->broadcast, &tunnel->parms.iph.daddr, 4); +@@ -1207,6 +1208,7 @@ static void __net_exit sit_destroy_tunne + static int __net_init sit_init_net(struct net *net) + { + struct sit_net *sitn = net_generic(net, sit_net_id); ++ struct ip_tunnel *t; + int err; + + sitn->tunnels[0] = sitn->tunnels_wc; +@@ -1231,6 +1233,9 @@ static int __net_init sit_init_net(struc + if ((err = register_netdev(sitn->fb_tunnel_dev))) + goto err_reg_dev; + ++ t = netdev_priv(sitn->fb_tunnel_dev); ++ ++ strcpy(t->parms.name, sitn->fb_tunnel_dev->name); + return 0; + + err_reg_dev: diff --git a/queue-3.1/rtc-expire-alarms-after-the-time-is-set.patch b/queue-3.1/rtc-expire-alarms-after-the-time-is-set.patch new file mode 100644 index 00000000000..063cba6632a --- /dev/null +++ b/queue-3.1/rtc-expire-alarms-after-the-time-is-set.patch @@ -0,0 +1,60 @@ +From 93b2ec0128c431148b216b8f7337c1a52131ef03 Mon Sep 17 00:00:00 2001 +From: NeilBrown +Date: Fri, 9 Dec 2011 09:39:15 +1100 +Subject: rtc: Expire alarms after the time is set. + +From: NeilBrown + +commit 93b2ec0128c431148b216b8f7337c1a52131ef03 upstream. + +If the alarm time programming in the rtc is ever in the past, it won't fire, +and any other alarm will be queued after it so they won't fire either. + +So any time that the alarm might be in the past, we need to trigger +the irq handler to ensure the old alarm is cleared and the timer queue +is fully in the future. + +This can happen: + - when we first initialise the alarm + - when we set the time in the rtc. + +so follow both of these by scheduling the timer work function. + +Signed-off-by: NeilBrown +[Also catch set_mmss case -jstultz] +Signed-off-by: John Stultz +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/rtc/interface.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +--- a/drivers/rtc/interface.c ++++ b/drivers/rtc/interface.c +@@ -72,6 +72,8 @@ int rtc_set_time(struct rtc_device *rtc, + err = -EINVAL; + + mutex_unlock(&rtc->ops_lock); ++ /* A timer might have just expired */ ++ schedule_work(&rtc->irqwork); + return err; + } + EXPORT_SYMBOL_GPL(rtc_set_time); +@@ -111,6 +113,8 @@ int rtc_set_mmss(struct rtc_device *rtc, + err = -EINVAL; + + mutex_unlock(&rtc->ops_lock); ++ /* A timer might have just expired */ ++ schedule_work(&rtc->irqwork); + + return err; + } +@@ -402,6 +406,8 @@ int rtc_initialize_alarm(struct rtc_devi + timerqueue_add(&rtc->timerqueue, &rtc->aie_timer.node); + } + mutex_unlock(&rtc->ops_lock); ++ /* maybe that was in the past.*/ ++ schedule_work(&rtc->irqwork); + return err; + } + EXPORT_SYMBOL_GPL(rtc_initialize_alarm); diff --git a/queue-3.1/rtc-m41t80-workaround-broken-alarm-functionality.patch b/queue-3.1/rtc-m41t80-workaround-broken-alarm-functionality.patch new file mode 100644 index 00000000000..c4d04ff3fc7 --- /dev/null +++ b/queue-3.1/rtc-m41t80-workaround-broken-alarm-functionality.patch @@ -0,0 +1,54 @@ +From c3b79770e51ab1fd4201f3b54edf30113b9ce74f Mon Sep 17 00:00:00 2001 +From: John Stultz +Date: Mon, 12 Dec 2011 13:57:52 -0800 +Subject: rtc: m41t80: Workaround broken alarm functionality + +From: John Stultz + +commit c3b79770e51ab1fd4201f3b54edf30113b9ce74f upstream. + +The m41t80 driver can read and set the alarm, but it doesn't +seem to have a functional alarm irq. + +This causes failures when the generic core sees alarm functions, +but then cannot use them properly for things like UIE mode. + +Disabling the alarm functions allows proper error reporting, +and possible fallback to emulated modes. Once someone fixes +the alarm irq functionality, this can be restored. + +CC: Matt Turner +CC: Nico Macrionitis +CC: Atsushi Nemoto +Reported-by: Matt Turner +Reported-by: Nico Macrionitis +Tested-by: Nico Macrionitis +Signed-off-by: John Stultz +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/rtc/rtc-m41t80.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +--- a/drivers/rtc/rtc-m41t80.c ++++ b/drivers/rtc/rtc-m41t80.c +@@ -357,10 +357,19 @@ static int m41t80_rtc_read_alarm(struct + static struct rtc_class_ops m41t80_rtc_ops = { + .read_time = m41t80_rtc_read_time, + .set_time = m41t80_rtc_set_time, ++ /* ++ * XXX - m41t80 alarm functionality is reported broken. ++ * until it is fixed, don't register alarm functions. ++ * + .read_alarm = m41t80_rtc_read_alarm, + .set_alarm = m41t80_rtc_set_alarm, ++ */ + .proc = m41t80_rtc_proc, ++ /* ++ * See above comment on broken alarm ++ * + .alarm_irq_enable = m41t80_rtc_alarm_irq_enable, ++ */ + }; + + #if defined(CONFIG_RTC_INTF_SYSFS) || defined(CONFIG_RTC_INTF_SYSFS_MODULE) diff --git a/queue-3.1/series b/queue-3.1/series new file mode 100644 index 00000000000..4bab0c51577 --- /dev/null +++ b/queue-3.1/series @@ -0,0 +1,9 @@ +arm-omap-rx51-fix-usb.patch +ipip-sit-copy-parms.name-after-register_netdevice.patch +rtc-expire-alarms-after-the-time-is-set.patch +rtc-m41t80-workaround-broken-alarm-functionality.patch +alsa-hda-set-position-fix-to-lpib-for-an-atom-poulsbo-based-device.patch +drm-i915-set-the-right-sdvo-transcoder-for-cpt.patch +drm-i915-prevent-division-by-zero-when-asking-for-chipset-power.patch +cfq-iosched-free-cic_index-if-blkio_alloc_blkg_stats-fails.patch +cfq-iosched-fix-cfq_cic_link-race-confition.patch