On Monday, February 28, 2011, Rafael J. Wysocki wrote: > On Monday, February 28, 2011, Randy Dunlap wrote: > > On Tue, 1 Feb 2011 13:03:23 +0100 Ingo Molnar wrote: > > > > > * Ingo Molnar <mingo@xxxxxxx> wrote: > > > > > > > * Randy Dunlap <randy.dunlap@xxxxxxxxxx> wrote: > > > > > > > > > On Mon, 20 Dec 2010 20:00:13 +1100 Stephen Rothwell wrote: > > > > > > > > > > > Hi all, > > > > > > > > > > > > [The mirroring on kernel.org is running slowly] > > > > > > > > > > > > Changes since 20101217: > > > > > > > > > > ERROR: "thermal_cooling_device_register" [drivers/acpi/video.ko] undefined! > > > > > ERROR: "thermal_cooling_device_unregister" [drivers/acpi/video.ko] undefined! > > > > > > > > This bug has been reported two months ago, one month ago, it has been ignored twice > > > > and now the bug has been pushed upstream and it's triggering there as well. > > > > > > > > What's going on? > > > > > > *Tap*, *tap*, is this thing on? :) > > > > > > acpi-video is still build-broken upstream, as of .38-rc3: > > > > > > MODPOST 651 modules > > > ERROR: "thermal_cooling_device_register" [drivers/acpi/video.ko] undefined! > > > ERROR: "thermal_cooling_device_unregister" [drivers/acpi/video.ko] undefined! > > > WARNING: modpost: Found 37 section mismatch(es). > > > To see full details build your kernel with: > > > 'make CONFIG_DEBUG_SECTION_MISMATCH=y' > > > make[1]: *** [__modpost] Error 1 > > > make: *** [modules] Error 2 > > > > > > Triggers in about 10% of all randconfig builds. Config attached. > > > > > > From: Randy Dunlap <randy.dunlap@xxxxxxxxxx> > > > > Several ACPI drivers select THERMAL, but THERMAL depends on NET > > (for netlink). Fix build breakage by making the ACPI drivers > > also depend on NET. > > Well, making ACPI_FAN depend on NET seems to be a kind of an overstretch to me. > A proper fix would be to disable the netlink interface in THERMAL when > NET is unset, I guess. I'll see what can be done to that end (although I had > hoped that the people who introduced the breakage would handle it). OK, please check if the appended patch helps. Admittedly, I only built it with CONFIG_NET set, so caveat emptor. Thanks, Rafael --- drivers/thermal/Kconfig | 1 - drivers/thermal/thermal_sys.c | 40 +++++++++++++++++++++------------------- include/linux/thermal.h | 8 ++++++++ 3 files changed, 29 insertions(+), 20 deletions(-) Index: linux-2.6/drivers/thermal/thermal_sys.c =================================================================== --- linux-2.6.orig/drivers/thermal/thermal_sys.c +++ linux-2.6/drivers/thermal/thermal_sys.c @@ -62,20 +62,6 @@ static DEFINE_MUTEX(thermal_list_lock); static unsigned int thermal_event_seqnum; -static struct genl_family thermal_event_genl_family = { - .id = GENL_ID_GENERATE, - .name = THERMAL_GENL_FAMILY_NAME, - .version = THERMAL_GENL_VERSION, - .maxattr = THERMAL_GENL_ATTR_MAX, -}; - -static struct genl_multicast_group thermal_event_mcgrp = { - .name = THERMAL_GENL_MCAST_GROUP_NAME, -}; - -static int genetlink_init(void); -static void genetlink_exit(void); - static int get_idr(struct idr *idr, struct mutex *lock, int *id) { int err; @@ -1225,6 +1211,18 @@ void thermal_zone_device_unregister(stru EXPORT_SYMBOL(thermal_zone_device_unregister); +#ifdef CONFIG_NET +static struct genl_family thermal_event_genl_family = { + .id = GENL_ID_GENERATE, + .name = THERMAL_GENL_FAMILY_NAME, + .version = THERMAL_GENL_VERSION, + .maxattr = THERMAL_GENL_ATTR_MAX, +}; + +static struct genl_multicast_group thermal_event_mcgrp = { + .name = THERMAL_GENL_MCAST_GROUP_NAME, +}; + int generate_netlink_event(u32 orig, enum events event) { struct sk_buff *skb; @@ -1301,6 +1299,15 @@ static int genetlink_init(void) return result; } +static void genetlink_exit(void) +{ + genl_unregister_family(&thermal_event_genl_family); +} +#else /* !CONFIG_NET */ +static inline int genetlink_init(void) { return 0; } +static inline void genetlink_exit(void) {} +#endif /* !CONFIG_NET */ + static int __init thermal_init(void) { int result = 0; @@ -1316,11 +1323,6 @@ static int __init thermal_init(void) return result; } -static void genetlink_exit(void) -{ - genl_unregister_family(&thermal_event_genl_family); -} - static void __exit thermal_exit(void) { class_unregister(&thermal_class); Index: linux-2.6/include/linux/thermal.h =================================================================== --- linux-2.6.orig/include/linux/thermal.h +++ linux-2.6/include/linux/thermal.h @@ -172,6 +172,14 @@ void thermal_zone_device_update(struct t struct thermal_cooling_device *thermal_cooling_device_register(char *, void *, const struct thermal_cooling_device_ops *); void thermal_cooling_device_unregister(struct thermal_cooling_device *); + +#ifdef CONFIG_NET extern int generate_netlink_event(u32 orig, enum events event); +#else +static inline int generate_netlink_event(u32 orig, enum events event) +{ + return 0; +} +#endif #endif /* __THERMAL_H__ */ Index: linux-2.6/drivers/thermal/Kconfig =================================================================== --- linux-2.6.orig/drivers/thermal/Kconfig +++ linux-2.6/drivers/thermal/Kconfig @@ -4,7 +4,6 @@ menuconfig THERMAL tristate "Generic Thermal sysfs driver" - depends on NET help Generic Thermal Sysfs driver offers a generic mechanism for thermal management. Usually it's made up of one or more thermal -- To unsubscribe from this list: send the line "unsubscribe linux-next" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html