ACPI patches for 2.6.22-rc5
Subsystems (2)
I'm requesting these three patches be included before 2.6.22 closes. Please speak up if you see any issues with them.
thanks,
-Len
PATCH 1/3 ACPI: gracefully print null trip-point device
From: Thomas Renninger <[email protected]>
if acpi_bus_get_device() returns NULL, print nothing instead of "<NUL" in /proc/acpi/thermal_zone/*/trip_points
--- drivers/acpi/thermal.c | 15 +++++++++++---- 1 files changed, 11 insertions(+), 4 deletions(-)
drivers/acpi/thermal.c +11 -4
@@ -828,6 +828,8 @@ static int acpi_thermal_trip_seq_show(struct seq_file *seq, void *offset) {struct acpi_thermal *tz = seq->private;struct acpi_device *device; +acpi_status status; +int i =0 ;int j =0 ;
@@ -850,8 +852,10 @@ static int acpi_thermal_trip_seq_show(struct seq_file *seq, void *offset) tz->trips.passive.tc1, tz->trips.passive.tc2, tz->trips.passive.tsp);for (j =0 ; j < tz->trips.passive.devices.count; j++) { -acpi_bus_get_device (tz->trips.passive.devices.handles[j], &device); -seq_printf (seq,"%4.4s " ,acpi_device_bid (device)); + status =acpi_bus_get_device (tz->trips.passive.devices. + handles[j], &device); +seq_printf (seq,"%4.4s " , status ?"" : +acpi_device_bid (device)); }seq_puts (seq,"\n" ); }
@@ -863,8 +867,11 @@ static int acpi_thermal_trip_seq_show(struct seq_file *seq, void *offset) i, KELVIN_TO_CELSIUS(tz->trips.active[i].temperature));for (j =0 ; j < tz->trips.active[i].devices.count; j++){ -acpi_bus_get_device (tz->trips.active[i].devices.handles[j], &device); -seq_printf (seq,"%4.4s " ,acpi_device_bid (device)); + status =acpi_bus_get_device (tz->trips.active[i]. + devices.handles[j], + &device); +seq_printf (seq,"%4.4s " , status ?"" : +acpi_device_bid (device)); }seq_puts (seq,"\n" ); }
Signature · 1 line
1.5.2.1.255.gca6c0
PATCH 2/3 ACPICA: fix error path in new external package objects as method arguments
From: Myron Stowe <[email protected]>
In the routine acpi_ut_create_package_object(), if the ACPI_ALLOCATE_ZEROED() fails then ACPI_FREE(package_desc) is called as part of the cleanup. This should instead be acpi_ut_remove_reference(package_desc) in order to remove the reference acquired from acpi_ut_create_internal_object() [see the routine acpi_ut_create_buffer_object() as an example of proper functionality].
--- drivers/acpi/utilities/utobject.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
drivers/acpi/utilities/utobject.c +1 -1
@@ -177,7 +177,7 @@ union acpi_operand_object *acpi_ut_create_package_object(u32 count) package_elements =ACPI_ALLOCATE_ZEROED ((acpi_size) (count +1 ) *sizeof (void *));if (!package_elements) { -ACPI_FREE (package_desc); +acpi_ut_remove_reference (package_desc);return_PTR (NULL ); }
Signature · 1 line
1.5.2.1.255.gca6c0
PATCH 3/3 ACPI: fix 2.6.20 SMP boot regression
From: Venkatesh Pallipadi <[email protected]>
Always disable/enable interrupts in the acpi idle routine, even in the error path.
This is required as the 2.6.20 change in git commit d331e739f5ad2aaa9... "Fix interrupt race in idle callback" expects the idle handler to enable interrupt before returning.
There was a case in acpi idle routine, in which interrupt was not being enabled before return, which caused the system to hang at bootup, while enabling C-states on an SMP system.
The signature of the hang was that "processor.nocst" was required to enable boot.
--- drivers/acpi/processor_idle.c | 10 ++++++---- 1 files changed, 6 insertions(+), 4 deletions(-)
drivers/acpi/processor_idle.c +6 -4
@@ -332,16 +332,18 @@ static void acpi_processor_idle(void)int sleep_ticks =0 ;u32 t1, t2 =0 ; - pr = processors[smp_processor_id ()]; -if (!pr) -return ; -/* * Interrupts must be disabled during bus mastering calculations and * for C2/C3 transitions. */ local_irq_disable (); + pr = processors[smp_processor_id ()]; +if (!pr) { +local_irq_enable (); +return ; + } +/* * Check whether we truly need to go idle, or should * reschedule:
Signature · 1 line
1.5.2.1.255.gca6c0