From: Randy Dunlap <randy.dunlap@oracle.com>
To: Len Brown <lenb@kernel.org>
Cc: linux-acpi@vger.kernel.org, Zhang Rui <rui.zhang@intel.com>,
Thomas Sujith <sujith.thomas@intel.com>,
Len Brown <len.brown@intel.com>
Subject: Re: [PATCH 053/112] the generic thermal sysfs driver
Date: Thu, 7 Feb 2008 08:46:45 -0800 [thread overview]
Message-ID: <20080207084645.c6e67aad.randy.dunlap@oracle.com> (raw)
In-Reply-To: <203d3d4aa482339b4816f131f713e1b8ee37f6dd.1202376824.git.len.brown@intel.com>
On Thu, 7 Feb 2008 04:34:15 -0500 Len Brown wrote:
> From: Zhang Rui <rui.zhang@intel.com>
>
> The Generic Thermal sysfs driver for thermal management.
>
> Signed-off-by: Zhang Rui <rui.zhang@intel.com>
> Signed-off-by: Thomas Sujith <sujith.thomas@intel.com>
> Signed-off-by: Len Brown <len.brown@intel.com>
> ---
> Documentation/thermal/sysfs-api.txt | 246 ++++++++++++
> drivers/Kconfig | 2 +
> drivers/Makefile | 1 +
> drivers/thermal/Kconfig | 15 +
> drivers/thermal/Makefile | 5 +
> drivers/thermal/thermal.c | 714 +++++++++++++++++++++++++++++++++++
> include/linux/thermal.h | 90 +++++
> 7 files changed, 1073 insertions(+), 0 deletions(-)
> create mode 100644 Documentation/thermal/sysfs-api.txt
> create mode 100644 drivers/thermal/Kconfig
> create mode 100644 drivers/thermal/Makefile
> create mode 100644 drivers/thermal/thermal.c
> create mode 100644 include/linux/thermal.h
>
> diff --git a/Documentation/thermal/sysfs-api.txt b/Documentation/thermal/sysfs-api.txt
> new file mode 100644
> index 0000000..5776e09
> --- /dev/null
> +++ b/Documentation/thermal/sysfs-api.txt
Nice doc. Thanks.
> @@ -0,0 +1,246 @@
> +Generic Thermal Sysfs driver How To
> +=========================
> +
> +Written by Sujith Thomas <sujith.thomas@intel.com>, Zhang Rui <rui.zhang@intel.com>
> +
> +Updated: 2 January 2008
> +
> +Copyright (c) 2008 Intel Corporation
> +
> +
> +0. Introduction
> +
> +The generic thermal sysfs provides a set of interfaces for thermal zone devices (sensors)
> +and thermal cooling devices (fan, processor...) to register with the thermal management
> +solution and to be a part of it.
> +
> +This how-to focusses on enabling new thermal zone and cooling devices to participate
s/focusses/focuses/
> +in thermal management.
> +This solution is platform independent and any type of thermal zone devices and
> +cooling devices should be able to make use of the infrastructure.
> +
> +The main task of the thermal sysfs driver is to expose thermal zone attributes as well
> +as cooling device attributes to the user space.
> +An intelligent thermal management application can make decisions based on inputs
> +from thermal zone attributes (the current temperature and trip point temperature)
> +and throttle appropriate devices.
> +
> +[0-*] denotes any positive number starting from 0
> +[1-*] denotes any positive number starting from 1
> +
...
> +2. sysfs attributes structure
> +
> +RO read only value
> +RW read/write value
> +
> +All thermal sysfs attributes will be represented under /sys/class/thermal
> +/sys/class/thermal/
Is that a duplicated path? or what?
> +
> +Thermal zone device sys I/F, created once it's registered:
> +|thermal_zone[0-*]:
> + |-----type: Type of the thermal zone
> + |-----temp: Current temperature
> + |-----mode: Working mode of the thermal zone
> + |-----trip_point_[0-*]_temp: Trip point temperature
> + |-----trip_point_[0-*]_type: Trip point type
> +
> +Thermal cooling device sys I/F, created once it's registered:
> +|cooling_device[0-*]:
> + |-----type : Type of the cooling device(processor/fan/...)
> + |-----max_state: Maximum cooling state of the cooling device
> + |-----cur_state: Current cooling state of the cooling device
> +
> +
> +These two dynamic attributes are created/removed in pairs.
> +They represent the relationship between a thermal zone and its associated cooling device.
> +They are created/removed for each
> +thermal_zone_bind_cooling_device/thermal_zone_unbind_cooling_device successful exection.
> +
> +|thermal_zone[0-*]
> + |-----cdev[0-*]: The [0-*]th cooling device in the current thermal zone
> + |-----cdev[0-*]_trip_point: Trip point that cdev[0-*] is associated with
> +
> +
> +***************************
> +* Thermal zone attributes *
> +***************************
> +
> +type Strings which represent the thermal zone type.
> + This is given by thermal zone driver as part of registration.
> + Eg: "ACPI thermal zone" indicates it's a ACPI thermal device
> + RO
> + Optional
> +
> +temp Current temperature as reported by thermal zone (sensor)
> + Unit: degree celsius
> + RO
> + Required
> +
> +mode One of the predifned values in [kernel, user]
predefined
> + This file gives information about the algorithm
> + that is currently managing the thermal zone.
> + It can be either default kernel based algorithm
> + or user space application.
> + RW
> + Optional
> + kernel = Thermal management in kernel thermal zone driver.
> + user = Preventing kernel thermal zone driver actions upon
> + trip points so that user application can take full
> + charge of the thermal management.
> +
> +trip_point_[0-*]_temp The temperature above which trip point will be fired
> + Unit: degree celsius
> + RO
> + Optional
> +
> +trip_point_[0-*]_type Strings which indicate the type of the trip point
> + Eg. it can be one of critical, hot, passive,
E.g.
> + active[0-*] for ACPI thermal zone.
> + RO
> + Optional
> +
> +cdev[0-*] Sysfs link to the thermal cooling device node where the sys I/F
> + for cooling device throttling control represents.
> + RO
> + Optional
> +
> +cdev[0-*]_trip_point The trip point with which cdev[0-*] is assocated in this thermal zone
> + -1 means the cooling device is not associated with any trip point.
> + RO
> + Optional
> +
> +******************************
> +* Cooling device attributes *
> +******************************
> +
> +type String which represents the type of device
> + eg: For generic ACPI: this should be "Fan",
> + "Processor" or "LCD"
> + eg. For memory controller device on intel_menlow platform:
> + this should be "Memory controller"
> + RO
> + Optional
> +
> +max_state The maximum permissible cooling state of this cooling device.
> + RO
> + Required
> +
> +cur_state The current cooling state of this cooling device.
> + the value can any integer numbers between 0 and max_state,
> + cur_state == 0 means no cooling
> + cur_state == max_state means the maximum cooling.
> + RW
> + Required
> +
> +3. A simple implementation
> +
> +ACPI thermal zone may support multiple trip points like critical/hot/passive/active.
> +If an ACPI thermal zone supports critical, passive, active[0] and active[1] at the same time,
> +it may register itself as a thermale_zone_device (thermal_zone1) with 4 trip points in all.
thermale ?
> +It has one processor and one fan, which are both registered as thermal_cooling_device.
> +If the processor is listed in _PSL method, and the fan is listed in _AL0 method,
> +the sys I/F structure will be built like this:
> +
> +/sys/class/thermal:
> +
> +|thermal_zone1:
> + |-----type: ACPI thermal zone
> + |-----temp: 37
> + |-----mode: kernel
> + |-----trip_point_0_temp: 100
> + |-----trip_point_0_type: critical
> + |-----trip_point_1_temp: 80
> + |-----trip_point_1_type: passive
> + |-----trip_point_2_temp: 70
> + |-----trip_point_2_type: active[0]
> + |-----trip_point_3_temp: 60
> + |-----trip_point_3_type: active[1]
> + |-----cdev0: --->/sys/class/thermal/cooling_device0
> + |-----cdev0_trip_point: 1 /* cdev0 can be used for passive */
> + |-----cdev1: --->/sys/class/thermal/cooling_device3
> + |-----cdev1_trip_point: 2 /* cdev1 can be used for active[0]*/
> +
> +|cooling_device0:
> + |-----type: Processor
> + |-----max_state: 8
> + |-----cur_state: 0
> +
> +|cooling_device3:
> + |-----type: Fan
> + |-----max_state: 2
> + |-----cur_state: 0
> diff --git a/drivers/thermal/Kconfig b/drivers/thermal/Kconfig
> new file mode 100644
> index 0000000..9b3f612
> --- /dev/null
> +++ b/drivers/thermal/Kconfig
> @@ -0,0 +1,15 @@
> +#
> +# Generic thermal sysfs drivers configuration
> +#
> +
> +menuconfig THERMAL
> + bool "Generic Thermal sysfs driver"
> + default y
> + help
> + Generic Thermal Sysfs driver offers a generic mechanism for
> + thermal management. Usually it's made up of one or more thermal
> + zone and cooling device.
> + each thermal zone contains its own temperature, trip points,
Each
> + cooling devices.
> + All platforms with ACPI thermal support can use this driver.
> + If you want this support, you should say Y here
here.
> diff --git a/drivers/thermal/Makefile b/drivers/thermal/Makefile
> new file mode 100644
> index 0000000..8ef1232
> --- /dev/null
> +++ b/drivers/thermal/Makefile
> @@ -0,0 +1,5 @@
> +#
> +# Makefile for sensor chip drivers.
> +#
> +
> +obj-$(CONFIG_THERMAL) += thermal.o
> diff --git a/drivers/thermal/thermal.c b/drivers/thermal/thermal.c
> new file mode 100644
> index 0000000..3273e34
> --- /dev/null
> +++ b/drivers/thermal/thermal.c
> @@ -0,0 +1,714 @@
> +/*
> + * thermal.c - Generic Thermal Management Sysfs support.
> + *
> + * Copyright (C) 2008 Intel Corp
> + * Copyright (C) 2008 Zhang Rui <rui.zhang@intel.com>
> + * Copyright (C) 2008 Sujith Thomas <sujith.thomas@intel.com>
> + *
> + *
> + */
> +
> +#include <linux/module.h>
> +#include <linux/device.h>
> +#include <linux/err.h>
> +#include <linux/kdev_t.h>
> +#include <linux/idr.h>
> +#include <linux/thermal.h>
> +#include <linux/spinlock.h>
> +
> +MODULE_AUTHOR("Zhang Rui")
> +MODULE_DESCRIPTION("Generic thermal management sysfs support");
> +MODULE_LICENSE("GPL");
> +
> +#define PREFIX "Thermal: "
> +
> +struct thermal_cooling_device_instance {
> + int id;
> + char name[THERMAL_NAME_LENGTH];
> + struct thermal_zone_device *tz;
> + struct thermal_cooling_device *cdev;
> + int trip;
> + char attr_name[THERMAL_NAME_LENGTH];
> + struct device_attribute attr;
> + struct list_head node;
> +};
> +
> +static DEFINE_IDR(thermal_tz_idr);
> +static DEFINE_IDR(thermal_cdev_idr);
> +static DEFINE_MUTEX(thermal_idr_lock);
> +
> +static LIST_HEAD(thermal_tz_list);
> +static LIST_HEAD(thermal_cdev_list);
> +static DEFINE_MUTEX(thermal_list_lock);
> +
> +static int get_idr(struct idr *idr, struct mutex *lock, int *id)
> +{
> + int err;
> +
> + again:
Don't indent labels so much (just 0 or 1 spaces). When they are
indented so much, it's difficult to see them (they are close to
hidden).
> + if (unlikely(idr_pre_get(idr, GFP_KERNEL) == 0))
> + return -ENOMEM;
> +
> + if (lock)
> + mutex_lock(lock);
> + err = idr_get_new(idr, NULL, id);
> + if (lock)
> + mutex_unlock(lock);
> + if (unlikely(err == -EAGAIN))
> + goto again;
> + else if (unlikely(err))
> + return err;
> +
> + *id = *id & MAX_ID_MASK;
> + return 0;
> +}
> +
> +/* Device management */
> +
> +/**
> + * thermal_zone_bind_cooling_device - bind a cooling device to a thermal zone
> + * this function is usually called in the thermal zone device .bind callback.
> + * @tz: thermal zone device
> + * @trip: indicates which trip point the cooling devices is
> + * associated with in this thermal zone.
> + * @cdev: thermal cooling device
> + */
Please see Documentation/kernel-doc-nano-HOWTO.txt for info on
kernel-doc format. The second line above ("this function...")
is out of place. It should be moved to follow the function
parameters and separated from them by one "blank" (actually
" *") line.
> +int thermal_zone_bind_cooling_device(struct thermal_zone_device *tz,
> + int trip,
> + struct thermal_cooling_device *cdev)
> +{
> + struct thermal_cooling_device_instance *dev;
> + struct thermal_cooling_device_instance *pos;
> + int result;
> +
> + if (trip >= tz->trips ||
> + (trip < 0 && trip != THERMAL_TRIPS_NONE))
> + return -EINVAL;
> +
> + if (!tz || !cdev)
> + return -EINVAL;
> +
> + dev =
> + kzalloc(sizeof(struct thermal_cooling_device_instance), GFP_KERNEL);
> + if (!dev)
> + return -ENOMEM;
> + dev->tz = tz;
> + dev->cdev = cdev;
> + dev->trip = trip;
> + result = get_idr(&tz->idr, &tz->lock, &dev->id);
> + if (result)
> + goto free_mem;
> +
> + sprintf(dev->name, "cdev%d", dev->id);
> + result =
> + sysfs_create_link(&tz->device.kobj, &cdev->device.kobj, dev->name);
> + if (result)
> + goto release_idr;
> +
> + sprintf(dev->attr_name, "cdev%d_trip_point", dev->id);
> + dev->attr.attr.name = dev->attr_name;
> + dev->attr.attr.mode = 0444;
> + dev->attr.show = thermal_cooling_device_trip_point_show;
> + result = device_create_file(&tz->device, &dev->attr);
> + if (result)
> + goto remove_symbol_link;
> +
> + mutex_lock(&tz->lock);
> + list_for_each_entry(pos, &tz->cooling_devices, node)
> + if (pos->tz == tz && pos->trip == trip && pos->cdev == cdev) {
> + result = -EEXIST;
> + break;
> + }
> + if (!result)
> + list_add_tail(&dev->node, &tz->cooling_devices);
> + mutex_unlock(&tz->lock);
> +
> + if (!result)
> + return 0;
> +
> + device_remove_file(&tz->device, &dev->attr);
> + remove_symbol_link:
> + sysfs_remove_link(&tz->device.kobj, dev->name);
> + release_idr:
> + release_idr(&tz->idr, &tz->lock, dev->id);
> + free_mem:
> + kfree(dev);
> + return result;
> +}
> +EXPORT_SYMBOL(thermal_zone_bind_cooling_device);
> +
> +/**
> + * thermal_zone_unbind_cooling_device - unbind a cooling device from a thermal zone
> + * this function is usually called in the thermal zone device .unbind callback.
> + * @tz: thermal zone device
> + * @trip: indicates which trip point the cooling devices is
> + * associated with in this thermal zone.
> + * @cdev: thermal cooling device
> + */
Ditto.
> +int thermal_zone_unbind_cooling_device(struct thermal_zone_device *tz,
> + int trip,
> + struct thermal_cooling_device *cdev)
> +{
> + struct thermal_cooling_device_instance *pos, *next;
> +
> + mutex_lock(&tz->lock);
> + list_for_each_entry_safe(pos, next, &tz->cooling_devices, node) {
> + if (pos->tz == tz && pos->trip == trip
> + && pos->cdev == cdev) {
> + list_del(&pos->node);
> + mutex_unlock(&tz->lock);
> + goto unbind;
> + }
> + }
> + mutex_unlock(&tz->lock);
> +
> + return -ENODEV;
> +
> + unbind:
> + device_remove_file(&tz->device, &pos->attr);
> + sysfs_remove_link(&tz->device.kobj, pos->name);
> + release_idr(&tz->idr, &tz->lock, pos->id);
> + kfree(pos);
> + return 0;
> +}
> +EXPORT_SYMBOL(thermal_zone_unbind_cooling_device);
> +
> +/**
> + * thermal_cooling_device_register - register a new thermal cooling device
> + * @type: the thermal cooling device type.
> + * @devdata: device private data.
> + * @ops: standard thermal cooling devices callbacks.
> + */
> +struct thermal_cooling_device *thermal_cooling_device_register(char *type,
> + void *devdata, struct thermal_cooling_device_ops *ops)
> +{
> + struct thermal_cooling_device *cdev;
> + struct thermal_zone_device *pos;
> + int result;
> +
> + if (strlen(type) >= THERMAL_NAME_LENGTH)
> + return NULL;
> +
> + if (!ops || !ops->get_max_state || !ops->get_cur_state ||
> + !ops->set_cur_state)
> + return NULL;
> +
> + cdev = kzalloc(sizeof(struct thermal_cooling_device), GFP_KERNEL);
> + if (!cdev)
> + return NULL;
> +
> + result = get_idr(&thermal_cdev_idr, &thermal_idr_lock, &cdev->id);
> + if (result) {
> + kfree(cdev);
> + return NULL;
> + }
> +
> + strcpy(cdev->type, type);
> + cdev->ops = ops;
> + cdev->device.class = &thermal_class;
> + cdev->devdata = devdata;
> + sprintf(cdev->device.bus_id, "cooling_device%d", cdev->id);
> + result = device_register(&cdev->device);
> + if (result) {
> + release_idr(&thermal_cdev_idr, &thermal_idr_lock, cdev->id);
> + kfree(cdev);
> + return NULL;
> + }
> +
> + /* sys I/F */
> + if (type) {
> + result = device_create_file(&cdev->device,
> + &dev_attr_cdev_type);
> + if (result)
> + goto unregister;
> + }
> +
> + result = device_create_file(&cdev->device, &dev_attr_max_state);
> + if (result)
> + goto unregister;
> +
> + result = device_create_file(&cdev->device, &dev_attr_cur_state);
> + if (result)
> + goto unregister;
> +
> + mutex_lock(&thermal_list_lock);
> + list_add(&cdev->node, &thermal_cdev_list);
> + list_for_each_entry(pos, &thermal_tz_list, node) {
> + if (!pos->ops->bind)
> + continue;
> + result = pos->ops->bind(pos, cdev);
> + if (result)
> + break;
> +
> + }
> + mutex_unlock(&thermal_list_lock);
> +
> + if (!result)
> + return cdev;
> +
> + unregister:
Hidden label placement. Please check all labels.
> + release_idr(&thermal_cdev_idr, &thermal_idr_lock, cdev->id);
> + device_unregister(&cdev->device);
> + return NULL;
> +}
> +EXPORT_SYMBOL(thermal_cooling_device_register);
> +
> +/**
> + * thermal_cooling_device_unregister - removes the registered thermal cooling device
> + *
No "blank" (" *") line allowed between function name-description and the
function parameters.
> + * @cdev: the thermal cooling device to remove.
> + *
> + * thermal_cooling_device_unregister() must be called when the device is no
> + * longer needed.
> + */
> +void thermal_cooling_device_unregister(struct
> + thermal_cooling_device
> + *cdev)
> +{
...
> +}
> +EXPORT_SYMBOL(thermal_cooling_device_unregister);
> +
> +/**
> + * thermal_zone_device_register - register a new thermal zone device
> + * @type: the thermal zone device type
> + * @trips: the number of trip points the thermal zone support
> + * @devdata: private device data
> + * @ops: standard thermal zone device callbacks
> + *
> + * thermal_zone_device_unregister() must be called when the device is no
> + * longer needed.
> + */
> +struct thermal_zone_device *thermal_zone_device_register(char *type,
> + int trips, void *devdata,
> + struct thermal_zone_device_ops *ops)
> +{
> + struct thermal_zone_device *tz;
> + struct thermal_cooling_device *pos;
> + int result;
> + int count;
> +
> + if (strlen(type) >= THERMAL_NAME_LENGTH)
> + return NULL;
> +
> + if (trips > THERMAL_MAX_TRIPS || trips < 0)
> + return NULL;
> +
> + if (!ops || !ops->get_temp)
> + return NULL;
> +
> + tz = kzalloc(sizeof(struct thermal_zone_device), GFP_KERNEL);
> + if (!tz)
> + return NULL;
> +
> + INIT_LIST_HEAD(&tz->cooling_devices);
> + idr_init(&tz->idr);
> + mutex_init(&tz->lock);
> + result = get_idr(&thermal_tz_idr, &thermal_idr_lock, &tz->id);
> + if (result) {
> + kfree(tz);
> + return NULL;
> + }
> +
> + strcpy(tz->type, type);
> + tz->ops = ops;
> + tz->device.class = &thermal_class;
> + tz->devdata = devdata;
> + tz->trips = trips;
> + sprintf(tz->device.bus_id, "thermal_zone%d", tz->id);
> + result = device_register(&tz->device);
> + if (result) {
> + release_idr(&thermal_tz_idr, &thermal_idr_lock, tz->id);
> + kfree(tz);
> + return NULL;
> + }
> +
> + /* sys I/F */
> + if (type) {
> + result = device_create_file(&tz->device, &dev_attr_type);
> + if (result)
> + goto unregister;
> + }
> +
> + result = device_create_file(&tz->device, &dev_attr_temp);
> + if (result)
> + goto unregister;
> +
> + if (ops->get_mode) {
> + result = device_create_file(&tz->device, &dev_attr_mode);
> + if (result)
> + goto unregister;
> + }
> +
> + for (count = 0; count < trips; count++) {
> + TRIP_POINT_ATTR_ADD(&tz->device, count, result);
> + if (result)
> + goto unregister;
> + }
> +
> + mutex_lock(&thermal_list_lock);
> + list_add_tail(&tz->node, &thermal_tz_list);
> + if (ops->bind)
> + list_for_each_entry(pos, &thermal_cdev_list, node) {
> + result = ops->bind(tz, pos);
> + if (result)
> + break;
> + }
> + mutex_unlock(&thermal_list_lock);
> +
> + if (!result)
> + return tz;
> +
> + unregister:
Hidden label.
> + release_idr(&thermal_tz_idr, &thermal_idr_lock, tz->id);
> + device_unregister(&tz->device);
> + return NULL;
> +}
> +EXPORT_SYMBOL(thermal_zone_device_register);
> +
> +/**
> + * thermal_device_unregister - removes the registered thermal zone device
> + *
No "blank" line here.
> + * @tz: the thermal zone device to remove
> + */
> +void thermal_zone_device_unregister(struct thermal_zone_device *tz)
> +{
> + struct thermal_cooling_device *cdev;
> + struct thermal_zone_device *pos = NULL;
> + int count;
> +
> + if (!tz)
> + return;
> +
> + mutex_lock(&thermal_list_lock);
> + list_for_each_entry(pos, &thermal_tz_list, node)
> + if (pos == tz)
> + break;
> + if (pos != tz) {
> + /* thermal zone device not found */
> + mutex_unlock(&thermal_list_lock);
> + return;
> + }
> + list_del(&tz->node);
> + if (tz->ops->unbind)
> + list_for_each_entry(cdev, &thermal_cdev_list, node)
> + tz->ops->unbind(tz, cdev);
> + mutex_unlock(&thermal_list_lock);
> +
> + if (tz->type[0])
> + device_remove_file(&tz->device, &dev_attr_type);
> + device_remove_file(&tz->device, &dev_attr_temp);
> + if (tz->ops->get_mode)
> + device_remove_file(&tz->device, &dev_attr_mode);
> +
> + for (count = 0; count < tz->trips; count++)
> + TRIP_POINT_ATTR_REMOVE(&tz->device, count);
> +
> + release_idr(&thermal_tz_idr, &thermal_idr_lock, tz->id);
> + idr_destroy(&tz->idr);
> + mutex_destroy(&tz->lock);
> + device_unregister(&tz->device);
> + return;
> +}
> +EXPORT_SYMBOL(thermal_zone_device_unregister);
---
~Randy
next prev parent reply other threads:[~2008-02-07 16:48 UTC|newest]
Thread overview: 123+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-02-07 9:33 ACPI patches for 2.6.25-rc0 Len Brown
2008-02-07 9:33 ` [PATCH 001/112] ACPI: add control method tracing support Len Brown
2008-02-07 9:33 ` [PATCH 002/112] ACPI: document method tracing hooks Len Brown
2008-02-07 9:33 ` [PATCH 003/112] ACPI: CONFIG_CPU_IDLE=ACPI by default Len Brown
2008-02-07 9:33 ` [PATCH 004/112] ACPI: disable stray GPE, prevent ACPI interrupt storm Len Brown
2008-02-07 9:33 ` [PATCH 005/112] Revert "speedstep-lib.c: fix frequency multiplier for Pentium4 models 0&1" Len Brown
2008-02-07 9:33 ` [PATCH 006/112] ACPI: Defer enabling of level GPE until all pending notifies done Len Brown
2008-02-07 9:33 ` [PATCH 007/112] export thermal notification to userspace when nocrt is set Len Brown
2008-02-07 9:33 ` [PATCH 008/112] ACPI: Fix autloading of dock, video, bay and all linux specific HID drivers Len Brown
2008-02-07 9:33 ` [PATCH 009/112] ACPI: Add autoload info to dock driver Len Brown
2008-02-07 9:33 ` [PATCH 010/112] ACPI: Also autoload the bay driver, was forgotten Len Brown
2008-02-07 9:33 ` [PATCH 011/112] acpi: make __acpi_map_table() and __init function Len Brown
2008-02-07 9:33 ` [PATCH 012/112] cpuidle: create processor.latency_factor tunable Len Brown
2008-02-07 9:33 ` [PATCH 013/112] cpuidle: default processor.latency_factor=2 Len Brown
2008-02-07 9:33 ` [PATCH 014/112] ACPI: tables: complete searching upon RSDP w/ bad checksum Len Brown
2008-02-07 9:33 ` [PATCH 015/112] ACPI: /proc/acpi/alarm parsing: handle large numbers properly Len Brown
2008-02-07 9:33 ` [PATCH 016/112] ACPI: detect invalid argument written to /proc/acpi/alarm Len Brown
2008-02-07 9:33 ` [PATCH 017/112] ACPI: add "processor.ignore_ppc" hook to workaround BIOS _PPC weirdness Len Brown
2008-02-07 9:33 ` [PATCH 018/112] ACPI: ACPI Exception (): AE_NOT_FOUND, Processor Device is not present Len Brown
2008-02-07 9:33 ` [PATCH 019/112] ACPI: EC: Do the byte access with a fast path Len Brown
2008-02-07 9:33 ` [PATCH 020/112] ACPI: EC: Some hardware requires burst mode to operate properly Len Brown
2008-02-07 9:33 ` [PATCH 021/112] ACPI: Fix acpi_pm_device_sleep_state() Len Brown
2008-02-07 9:33 ` [PATCH 022/112] ACPI: remove P2B-S from blacklist Len Brown
2008-02-07 9:33 ` [PATCH 023/112] pnp: Failed to activate device 00:0a - Samsung P35 XVM 1600 III Len Brown
2008-02-07 9:33 ` [PATCH 024/112] ACPI: Check for any matching CID when walking namespace Len Brown
2008-02-07 9:33 ` [PATCH 025/112] sony-laptop: printk more info in sony_pic_call[123] Len Brown
2008-02-07 9:33 ` [PATCH 026/112] sony-laptop: Add Vaio N series to the special init sequence to enable Fn keys Len Brown
2008-02-07 9:33 ` [PATCH 027/112] sony-laptop: refactor model types Len Brown
2008-02-07 9:33 ` [PATCH 028/112] sony-laptop: bump version to 0.6 Len Brown
2008-02-07 9:33 ` [PATCH 029/112] sony-laptop: add Type4 model Len Brown
2008-02-07 9:33 ` [PATCH 030/112] sony-laptop: fix scancode decode Len Brown
2008-02-07 9:33 ` [PATCH 031/112] cpuidle: build fix for non-x86 Len Brown
2008-02-07 9:33 ` [PATCH 032/112] ACPI: thinkpad-acpi: document keymap gotcha's (v2) Len Brown
2008-02-07 9:33 ` [PATCH 033/112] ACPI: thinkpad-acpi: refactor hotkey_get and hotkey_set (v2) Len Brown
2008-02-07 9:33 ` [PATCH 034/112] ACPI: thinkpad-acpi: prepare for NVRAM polling support Len Brown
2008-02-07 9:33 ` [PATCH 035/112] ACPI: thinkpad-acpi: add CMOS NVRAM polling for hot keys (v9) Len Brown
2008-02-07 9:33 ` [PATCH 036/112] ACPI: thinkpad-acpi: bump up version to 0.18 Len Brown
2008-02-07 9:33 ` [PATCH 037/112] ACPI: thinkpad-acpi: spring cleanup part 1 Len Brown
2008-02-07 9:34 ` [PATCH 038/112] ACPI: thinkpad-acpi: spring cleanup part 2 Len Brown
2008-02-07 9:34 ` [PATCH 039/112] ACPI: thinkpad-acpi: spring cleanup part 3 Len Brown
2008-02-07 9:34 ` [PATCH 040/112] ACPI: thinkpad-acpi: spring cleanup part 4 Len Brown
2008-02-07 9:34 ` [PATCH 041/112] ACPI: thinkpad-acpi: module glue cleanups Len Brown
2008-02-07 9:34 ` [PATCH 042/112] ACPI: thinkpad-acpi: rename IBM in defines Len Brown
2008-02-07 9:34 ` [PATCH 043/112] ACPI: thinkpad-acpi: some checkpatch.pl fluff Len Brown
2008-02-07 9:34 ` [PATCH 044/112] ACPI: thinkpad-acpi: add suspend handler Len Brown
2008-02-07 9:34 ` [PATCH 045/112] ACPI: thinkpad-acpi: cleanup hotkey_notify and HKEY log messages Len Brown
2008-02-07 9:34 ` [PATCH 046/112] ACPI: thinkpad-acpi: wakeup on hotunplug reporting Len Brown
2008-02-07 9:34 ` [PATCH 047/112] ACPI: thinkpad-acpi: add X61t HKEY events Len Brown
2008-02-07 9:34 ` [PATCH 048/112] ACPI: thinkpad-acpi: silence _sta warning Len Brown
2008-02-07 9:34 ` [PATCH 049/112] ACPI: thinkpad-acpi: add poll() support to some sysfs attributes Len Brown
2008-02-07 9:34 ` [PATCH 050/112] ACPI: thinkpad-acpi: update copyright dates to 2008 Len Brown
2008-02-07 9:34 ` [PATCH 051/112] ACPI: thinkpad-acpi: bump up version to 0.19 Len Brown
2008-02-07 9:34 ` [PATCH 052/112] ACPI: video: Rationalise ACPI backlight implementation Len Brown
2008-02-07 9:34 ` [PATCH 053/112] the generic thermal sysfs driver Len Brown
2008-02-07 16:46 ` Randy Dunlap [this message]
2008-02-07 22:05 ` Len Brown
2008-02-07 22:10 ` Randy Dunlap
2008-02-07 22:32 ` Len Brown
2008-02-07 20:09 ` Matthew Garrett
2008-02-07 21:38 ` Len Brown
2008-02-07 21:48 ` Matthew Garrett
2008-02-07 9:34 ` [PATCH 054/112] ACPI: register ACPI thermal zone as generic thermal zone devices Len Brown
2008-02-07 9:34 ` [PATCH 055/112] ACPI: ACPI thermal zone handle notification correctly Len Brown
2008-02-07 9:34 ` [PATCH 056/112] ACPI: register ACPI Fan as generic thermal cooling device Len Brown
2008-02-07 9:34 ` [PATCH 057/112] ACPI: register ACPI Processor " Len Brown
2008-02-12 8:14 ` Thomas Renninger
2008-02-07 9:34 ` [PATCH 058/112] ACPI: register ACPI Video LCD " Len Brown
2008-02-07 9:34 ` [PATCH 059/112] ACPI: attach thermal zone info Len Brown
2008-02-07 9:34 ` [PATCH 060/112] ACPI: CELSIUS_TO_KELVIN fixup Len Brown
2008-02-07 9:34 ` [PATCH 061/112] intel_menlo: introduce new platform specific driver Len Brown
2008-02-07 9:34 ` [PATCH 062/112] ACPI: thermal fixup Len Brown
2008-02-07 9:34 ` [PATCH 063/112] ACPI: video: Ignore devices that aren't present in hardware Len Brown
2008-02-07 9:34 ` [PATCH 064/112] ACPI: Set _PSD ACPI_PDC_SMP_T_SWCOORD Len Brown
2008-02-07 9:34 ` [PATCH 065/112] ACPI : Check parameter when calling acpi_processor_get/set_throttling Len Brown
2008-02-07 9:34 ` [PATCH 066/112] ACPI : Update T-state coordination after getting _TSD info Len Brown
2008-02-07 9:34 ` [PATCH 067/112] ACPI : Add T-state event notifier function Len Brown
2008-02-07 9:34 ` [PATCH 068/112] ACPI: Update the t-state for every affected cpu when t-state is changed Len Brown
2008-02-07 9:34 ` [PATCH 069/112] ACPI: throttling: fix build warning Len Brown
2008-02-07 9:34 ` [PATCH 070/112] ACPI: fan: build fix for CONFIG_ACPI_PROCFS=n Len Brown
2008-02-07 9:34 ` [PATCH 071/112] ACPI: remove redundant Acer blacklist entry Len Brown
2008-02-07 9:34 ` [PATCH 072/112] DMI: remove duplicate helper routine Len Brown
2008-02-07 9:34 ` [PATCH 073/112] ACPI: update blacklist comments Len Brown
2008-02-07 9:34 ` [PATCH 074/112] ACPI: make acpi_dmi_dump() static Len Brown
2008-02-07 9:34 ` [PATCH 075/112] ACPI: make struct osi_linux static Len Brown
2008-02-07 9:34 ` [PATCH 076/112] ACPI: blacklist update Len Brown
2008-02-07 9:34 ` [PATCH 077/112] ACPI: WMI: Add ACPI-WMI mapping driver Len Brown
2008-02-07 9:34 ` [PATCH 078/112] acer-wmi: Add driver for newer Acer laptops Len Brown
2008-02-07 9:34 ` [PATCH 079/112] tc1100-wmi: Add driver for HP Compaq TC1100 Tablets Len Brown
2008-02-07 9:34 ` [PATCH 080/112] ACPI: battery: add sysfs serial number Len Brown
2008-02-07 9:34 ` [PATCH 081/112] ACPI: basic initramfs DSDT override support Len Brown
2008-02-07 9:34 ` [PATCH 082/112] ACPI: Taint kernel on ACPI table override (format corrected) Len Brown
2008-02-07 9:34 ` [PATCH 083/112] ACPI: create /sys/firmware/acpi/interrupts Len Brown
2008-02-07 9:34 ` [PATCH 084/112] asus-laptop new write_acpi_int Len Brown
2008-02-07 9:34 ` [PATCH 085/112] asus-laptop: add parentheses Len Brown
2008-02-07 9:34 ` [PATCH 086/112] asus_acpi: add support for F3Sa Len Brown
2008-02-07 9:34 ` [PATCH 087/112] ACPI: remove duplicated warning message Len Brown
2008-02-07 9:34 ` [PATCH 088/112] ACPI: acpi_pci_irq_find_prt_entry(): use list_for_each_entry() instead of list_for_each() Len Brown
2008-02-07 9:34 ` [PATCH 089/112] ACPI: track opregion names to avoid driver resource conflicts Len Brown
2008-02-07 9:34 ` [PATCH 090/112] ACPI: Export acpi_check_resource_conflict Len Brown
2008-02-07 9:34 ` [PATCH 091/112] ACPI: thinkpad-acpi: second TP_EC_FAN_FULLSPEED should be TP_EC_FAN_AUTO Len Brown
2008-02-07 9:34 ` [PATCH 092/112] PM: documentation cleanups Len Brown
2008-02-07 9:34 ` [PATCH 093/112] ACPI: idle: Fix acpi_safe_halt usages and interrupt enabling/disabling Len Brown
2008-02-07 9:34 ` [PATCH 094/112] ACPI: enable MWAIT for C1 idle Len Brown
2008-02-07 9:34 ` [PATCH 095/112] ACPI: cpuidle: Support C1 idle time accounting Len Brown
2008-02-07 9:34 ` [PATCH 096/112] cpuidle: Add a poll_idle method Len Brown
2008-02-07 9:34 ` [PATCH 097/112] ACPI: video: create "brightness_switch_enabled" modparam Len Brown
2008-02-07 9:35 ` [PATCH 098/112] ACPI: video: delete unused display switch on hotkey event code Len Brown
2008-02-07 9:35 ` [PATCH 099/112] ACPI: create notifier chain to get hotkey events to graphics driver Len Brown
2008-02-07 9:35 ` [PATCH 100/112] ACPI: video: call ACPI notifier chain for ACPI video notifications Len Brown
2008-02-07 9:35 ` [PATCH 101/112] ACPI: video: reset brightness on resume Len Brown
2008-02-07 9:35 ` [PATCH 102/112] ACPI: video: Ignore ACPI video devices that aren't present in hardware Len Brown
2008-02-07 9:35 ` [PATCH 103/112] ACPICA: fix CONFIG_ACPI_DEBUG_FUNC_TRACE build Len Brown
2008-02-07 9:35 ` [PATCH 104/112] ACPI: cleanup acpi.h Len Brown
2008-02-07 9:35 ` [PATCH 105/112] ACPI: add missing prink prefix strings Len Brown
2008-02-07 9:35 ` [PATCH 106/112] ACPI: misc cleanups Len Brown
2008-02-07 9:35 ` [PATCH 107/112] ACPI: its a directory not a folder Len Brown
2008-02-07 9:35 ` [PATCH 108/112] ACPI: Add "acpi_no_initrd_override" kernel parameter Len Brown
2008-02-07 9:35 ` [PATCH 109/112] ACPI: update DSDT override documentation Len Brown
2008-02-07 9:35 ` [PATCH 110/112] ACPI: update intrd DSDT override console messages Len Brown
2008-02-07 9:35 ` [PATCH 111/112] Revert "cpuidle: build fix for non-x86" Len Brown
2008-02-07 10:27 ` Ingo Molnar
2008-02-07 18:47 ` Len Brown
2008-02-07 9:35 ` [PATCH 112/112] ACPI: fix build warning Len Brown
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20080207084645.c6e67aad.randy.dunlap@oracle.com \
--to=randy.dunlap@oracle.com \
--cc=len.brown@intel.com \
--cc=lenb@kernel.org \
--cc=linux-acpi@vger.kernel.org \
--cc=rui.zhang@intel.com \
--cc=sujith.thomas@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox