[kernel] r12317 - in dists/sid/linux-2.6/debian: . patches/bugfix/x86 patches/series

Bastian Blank waldi at alioth.debian.org
Thu Oct 16 21:14:34 UTC 2008


Author: waldi
Date: Thu Oct 16 21:14:33 2008
New Revision: 12317

Log:
* debian/changelog: Update.
* debian/patches/bugfix/x86/nonpnp-rtc-device-1.patch: Add.
* debian/patches/series/9: Use new patch.


Added:
   dists/sid/linux-2.6/debian/patches/bugfix/x86/nonpnp-rtc-device-1.patch
Modified:
   dists/sid/linux-2.6/debian/changelog
   dists/sid/linux-2.6/debian/patches/series/9

Modified: dists/sid/linux-2.6/debian/changelog
==============================================================================
--- dists/sid/linux-2.6/debian/changelog	(original)
+++ dists/sid/linux-2.6/debian/changelog	Thu Oct 16 21:14:33 2008
@@ -73,6 +73,7 @@
     - ixgbe: initialize interrupt throttle rate
     - i2c-dev: Return correct error code on class_create() failure
     - x86-32: AMD c1e force timer broadcast late
+  * [x86] Update patch to detect not properly announced cmos RTC devices.
 
   [ maximilian attems ]
   * [openvz] ip: NULL pointer dereferrence in tcp_v(4|6)_send_ack
@@ -92,6 +93,9 @@
   * [arm/ixp4xx] Enable USB_ATM and USB_SPEEDTOUCH (closes: #502182).
   * [arm/iop32x, arm/orion5x] Likewise.
 
+  [ Bastian Blank ]
+  * 
+
  -- Bastian Blank <waldi at debian.org>  Thu, 09 Oct 2008 15:14:50 +0200
 
 linux-2.6 (2.6.26-8) unstable; urgency=medium

Added: dists/sid/linux-2.6/debian/patches/bugfix/x86/nonpnp-rtc-device-1.patch
==============================================================================
--- (empty file)
+++ dists/sid/linux-2.6/debian/patches/bugfix/x86/nonpnp-rtc-device-1.patch	Thu Oct 16 21:14:33 2008
@@ -0,0 +1,148 @@
+From: Bjorn Helgaas <bjorn.helgaas at hp.com>
+Date: Tue, 14 Oct 2008 23:01:03 +0000 (-0600)
+Subject: x86: register a platform RTC device if PNP doesn't describe it
+X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=758a7f7bb86b520aadc484f23da85e547b3bf3d8
+
+x86: register a platform RTC device if PNP doesn't describe it
+
+Most if not all x86 platforms have an RTC device, but sometimes the RTC
+is not exposed as a PNP0b00/PNP0b01/PNP0b02 device in PNPBIOS or ACPI:
+
+    http://bugzilla.kernel.org/show_bug.cgi?id=11580
+    https://bugzilla.redhat.com/show_bug.cgi?id=451188
+
+It's best if we can discover the RTC via PNP because then we know
+which flavor of device it is, where it lives, and which IRQ it uses.
+
+But if we can't, we should register a platform device using the
+compiled-in RTC_PORT/RTC_IRQ resource assumptions.
+
+Signed-off-by: Bjorn Helgaas <bjorn.helgaas at hp.com>
+Acked-by: Rafael J. Wysocki <rjw at sisk.pl>
+Acked-by: David Brownell <dbrownell at users.sourceforge.net>
+Reported-by: Rik Theys <rik.theys at esat.kuleuven.be>
+Reported-by: shr_msn at yahoo.com.tw
+Signed-off-by: Linus Torvalds <torvalds at linux-foundation.org>
+---
+
+diff --git a/arch/x86/kernel/rtc.c b/arch/x86/kernel/rtc.c
+index 05191bb..0a23b57 100644
+--- a/arch/x86/kernel/rtc.c
++++ b/arch/x86/kernel/rtc.c
+@@ -223,11 +223,25 @@ static struct platform_device rtc_device = {
+ static __init int add_rtc_cmos(void)
+ {
+ #ifdef CONFIG_PNP
+-	if (!pnp_platform_devices)
+-		platform_device_register(&rtc_device);
+-#else
++	static const char *ids[] __initconst =
++	    { "PNP0b00", "PNP0b01", "PNP0b02", };
++	struct pnp_dev *dev;
++	struct pnp_id *id;
++	int i;
++
++	pnp_for_each_dev(dev) {
++		for (id = dev->id; id; id = id->next) {
++			for (i = 0; i < ARRAY_SIZE(ids); i++) {
++				if (compare_pnp_id(id, ids[i]) != 0)
++					return 0;
++			}
++		}
++	}
++#endif
++
+ 	platform_device_register(&rtc_device);
+-#endif /* CONFIG_PNP */
++	dev_info(&rtc_device.dev,
++		 "registered platform RTC device (no PNP device found)\n");
+ 	return 0;
+ }
+ device_initcall(add_rtc_cmos);
+
+From: Bjorn Helgaas <bjorn.helgaas at hp.com>
+Date: Tue, 14 Oct 2008 23:01:59 +0000 (-0600)
+Subject: rtc-cmos: look for PNP RTC first, then for platform RTC
+X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=72f22b1eb6ca5e4676a632a04d40d46cb61d4562
+
+rtc-cmos: look for PNP RTC first, then for platform RTC
+
+We shouldn't rely on "pnp_platform_devices" to tell us whether there
+is a PNP RTC device.
+
+I introduced "pnp_platform_devices", but I think it was a mistake.
+All it tells us is whether we found any PNPBIOS or PNPACPI devices.
+Many machines have some PNP devices, but do not describe the RTC
+via PNP.  On those machines, we need to do the platform driver probe
+to find the RTC.
+
+We should just register the PNP driver and see whether it claims anything.
+If we don't find a PNP RTC, fall back to the platform driver probe.
+
+This (in conjunction with the arch/x86/kernel/rtc.c patch to add
+a platform RTC device when PNP doesn't have one) should resolve
+these issues:
+
+    http://bugzilla.kernel.org/show_bug.cgi?id=11580
+    https://bugzilla.redhat.com/show_bug.cgi?id=451188
+
+Signed-off-by: Bjorn Helgaas <bjorn.helgaas at hp.com>
+Acked-by: Rafael J. Wysocki <rjw at sisk.pl>
+Acked-by: David Brownell <dbrownell at users.sourceforge.net>
+Reported-by: Rik Theys <rik.theys at esat.kuleuven.be>
+Reported-by: shr_msn at yahoo.com.tw
+Signed-off-by: Linus Torvalds <torvalds at linux-foundation.org>
+---
+
+diff --git a/drivers/rtc/rtc-cmos.c b/drivers/rtc/rtc-cmos.c
+index 6778f82..963ad0b 100644
+--- a/drivers/rtc/rtc-cmos.c
++++ b/drivers/rtc/rtc-cmos.c
+@@ -1120,29 +1120,32 @@ static struct platform_driver cmos_platform_driver = {
+ 
+ static int __init cmos_init(void)
+ {
++	int retval = 0;
++
+ #ifdef	CONFIG_PNP
+-	if (pnp_platform_devices)
+-		return pnp_register_driver(&cmos_pnp_driver);
+-	else
+-		return platform_driver_probe(&cmos_platform_driver,
+-			cmos_platform_probe);
+-#else
+-	return platform_driver_probe(&cmos_platform_driver,
+-			cmos_platform_probe);
+-#endif /* CONFIG_PNP */
++	pnp_register_driver(&cmos_pnp_driver);
++#endif
++
++	if (!cmos_rtc.dev)
++		retval = platform_driver_probe(&cmos_platform_driver,
++					       cmos_platform_probe);
++
++	if (retval == 0)
++		return 0;
++
++#ifdef	CONFIG_PNP
++	pnp_unregister_driver(&cmos_pnp_driver);
++#endif
++	return retval;
+ }
+ module_init(cmos_init);
+ 
+ static void __exit cmos_exit(void)
+ {
+ #ifdef	CONFIG_PNP
+-	if (pnp_platform_devices)
+-		pnp_unregister_driver(&cmos_pnp_driver);
+-	else
+-		platform_driver_unregister(&cmos_platform_driver);
+-#else
++	pnp_unregister_driver(&cmos_pnp_driver);
++#endif
+ 	platform_driver_unregister(&cmos_platform_driver);
+-#endif /* CONFIG_PNP */
+ }
+ module_exit(cmos_exit);
+ 

Modified: dists/sid/linux-2.6/debian/patches/series/9
==============================================================================
--- dists/sid/linux-2.6/debian/patches/series/9	(original)
+++ dists/sid/linux-2.6/debian/patches/series/9	Thu Oct 16 21:14:33 2008
@@ -4,3 +4,5 @@
 - bugfix/s390/prevent-ptrace-padding-area-read-write-in-31-bit-mode.patch
 + bugfix/all/stable/2.6.26.6.patch
 + bugfix/all/stable/2.6.26.6-abi-1.patch
+- bugfix/x86/nonpnp-rtc-device.patch
++ bugfix/x86/nonpnp-rtc-device-1.patch



More information about the Kernel-svn-changes mailing list