Commit 12308a2f authored by Len Brown's avatar Len Brown

Merge branches 'misc', 'eeepc-laptop' and 'bugzilla-14445' into release

This diff is collapsed.
...@@ -103,9 +103,9 @@ ...@@ -103,9 +103,9 @@
#define ACPI_MAX_REFERENCE_COUNT 0x1000 #define ACPI_MAX_REFERENCE_COUNT 0x1000
/* Size of cached memory mapping for system memory operation region */ /* Default page size for use in mapping memory for operation regions */
#define ACPI_SYSMEM_REGION_WINDOW_SIZE 4096 #define ACPI_DEFAULT_PAGE_SIZE 4096 /* Must be power of 2 */
/* owner_id tracking. 8 entries allows for 255 owner_ids */ /* owner_id tracking. 8 entries allows for 255 owner_ids */
......
...@@ -77,7 +77,8 @@ acpi_ex_system_memory_space_handler(u32 function, ...@@ -77,7 +77,8 @@ acpi_ex_system_memory_space_handler(u32 function,
void *logical_addr_ptr = NULL; void *logical_addr_ptr = NULL;
struct acpi_mem_space_context *mem_info = region_context; struct acpi_mem_space_context *mem_info = region_context;
u32 length; u32 length;
acpi_size window_size; acpi_size map_length;
acpi_size page_boundary_map_length;
#ifdef ACPI_MISALIGNMENT_NOT_SUPPORTED #ifdef ACPI_MISALIGNMENT_NOT_SUPPORTED
u32 remainder; u32 remainder;
#endif #endif
...@@ -144,25 +145,39 @@ acpi_ex_system_memory_space_handler(u32 function, ...@@ -144,25 +145,39 @@ acpi_ex_system_memory_space_handler(u32 function,
} }
/* /*
* Don't attempt to map memory beyond the end of the region, and * Attempt to map from the requested address to the end of the region.
* constrain the maximum mapping size to something reasonable. * However, we will never map more than one page, nor will we cross
* a page boundary.
*/ */
window_size = (acpi_size) map_length = (acpi_size)
((mem_info->address + mem_info->length) - address); ((mem_info->address + mem_info->length) - address);
if (window_size > ACPI_SYSMEM_REGION_WINDOW_SIZE) { /*
window_size = ACPI_SYSMEM_REGION_WINDOW_SIZE; * If mapping the entire remaining portion of the region will cross
* a page boundary, just map up to the page boundary, do not cross.
* On some systems, crossing a page boundary while mapping regions
* can cause warnings if the pages have different attributes
* due to resource management
*/
page_boundary_map_length =
ACPI_ROUND_UP(address, ACPI_DEFAULT_PAGE_SIZE) - address;
if (!page_boundary_map_length) {
page_boundary_map_length = ACPI_DEFAULT_PAGE_SIZE;
}
if (map_length > page_boundary_map_length) {
map_length = page_boundary_map_length;
} }
/* Create a new mapping starting at the address given */ /* Create a new mapping starting at the address given */
mem_info->mapped_logical_address = mem_info->mapped_logical_address = acpi_os_map_memory((acpi_physical_address) address, map_length);
acpi_os_map_memory((acpi_physical_address) address, window_size);
if (!mem_info->mapped_logical_address) { if (!mem_info->mapped_logical_address) {
ACPI_ERROR((AE_INFO, ACPI_ERROR((AE_INFO,
"Could not map memory at %8.8X%8.8X, size %X", "Could not map memory at %8.8X%8.8X, size %X",
ACPI_FORMAT_NATIVE_UINT(address), ACPI_FORMAT_NATIVE_UINT(address),
(u32) window_size)); (u32) map_length));
mem_info->mapped_length = 0; mem_info->mapped_length = 0;
return_ACPI_STATUS(AE_NO_MEMORY); return_ACPI_STATUS(AE_NO_MEMORY);
} }
...@@ -170,7 +185,7 @@ acpi_ex_system_memory_space_handler(u32 function, ...@@ -170,7 +185,7 @@ acpi_ex_system_memory_space_handler(u32 function,
/* Save the physical address and mapping size */ /* Save the physical address and mapping size */
mem_info->mapped_physical_address = address; mem_info->mapped_physical_address = address;
mem_info->mapped_length = window_size; mem_info->mapped_length = map_length;
} }
/* /*
......
...@@ -294,7 +294,11 @@ static int set_acpi_trip(struct acpi_power_meter_resource *resource) ...@@ -294,7 +294,11 @@ static int set_acpi_trip(struct acpi_power_meter_resource *resource)
return -EINVAL; return -EINVAL;
} }
return data; /* _PTP returns 0 on success, nonzero otherwise */
if (data)
return -EINVAL;
return 0;
} }
static ssize_t set_trip(struct device *dev, struct device_attribute *devattr, static ssize_t set_trip(struct device *dev, struct device_attribute *devattr,
......
...@@ -393,7 +393,7 @@ acpi_system_write_wakeup_device(struct file *file, ...@@ -393,7 +393,7 @@ acpi_system_write_wakeup_device(struct file *file,
struct list_head *node, *next; struct list_head *node, *next;
char strbuf[5]; char strbuf[5];
char str[5] = ""; char str[5] = "";
int len = count; unsigned int len = count;
struct acpi_device *found_dev = NULL; struct acpi_device *found_dev = NULL;
if (len > 4) if (len > 4)
......
...@@ -770,7 +770,7 @@ static struct notifier_block acpi_cpu_notifier = ...@@ -770,7 +770,7 @@ static struct notifier_block acpi_cpu_notifier =
.notifier_call = acpi_cpu_soft_notify, .notifier_call = acpi_cpu_soft_notify,
}; };
static int acpi_processor_add(struct acpi_device *device) static int __cpuinit acpi_processor_add(struct acpi_device *device)
{ {
struct acpi_processor *pr = NULL; struct acpi_processor *pr = NULL;
int result = 0; int result = 0;
......
...@@ -1133,15 +1133,15 @@ int acpi_processor_get_throttling_info(struct acpi_processor *pr) ...@@ -1133,15 +1133,15 @@ int acpi_processor_get_throttling_info(struct acpi_processor *pr)
int result = 0; int result = 0;
struct acpi_processor_throttling *pthrottling; struct acpi_processor_throttling *pthrottling;
if (!pr)
return -EINVAL;
ACPI_DEBUG_PRINT((ACPI_DB_INFO, ACPI_DEBUG_PRINT((ACPI_DB_INFO,
"pblk_address[0x%08x] duty_offset[%d] duty_width[%d]\n", "pblk_address[0x%08x] duty_offset[%d] duty_width[%d]\n",
pr->throttling.address, pr->throttling.address,
pr->throttling.duty_offset, pr->throttling.duty_offset,
pr->throttling.duty_width)); pr->throttling.duty_width));
if (!pr)
return -EINVAL;
/* /*
* Evaluate _PTC, _TSS and _TPC * Evaluate _PTC, _TSS and _TPC
* They must all be present or none of them can be used. * They must all be present or none of them can be used.
......
...@@ -1223,7 +1223,7 @@ acpi_video_device_write_state(struct file *file, ...@@ -1223,7 +1223,7 @@ acpi_video_device_write_state(struct file *file,
u32 state = 0; u32 state = 0;
if (!dev || count + 1 > sizeof str) if (!dev || count >= sizeof(str))
return -EINVAL; return -EINVAL;
if (copy_from_user(str, buffer, count)) if (copy_from_user(str, buffer, count))
...@@ -1280,7 +1280,7 @@ acpi_video_device_write_brightness(struct file *file, ...@@ -1280,7 +1280,7 @@ acpi_video_device_write_brightness(struct file *file,
int i; int i;
if (!dev || !dev->brightness || count + 1 > sizeof str) if (!dev || !dev->brightness || count >= sizeof(str))
return -EINVAL; return -EINVAL;
if (copy_from_user(str, buffer, count)) if (copy_from_user(str, buffer, count))
...@@ -1562,7 +1562,7 @@ acpi_video_bus_write_POST(struct file *file, ...@@ -1562,7 +1562,7 @@ acpi_video_bus_write_POST(struct file *file,
unsigned long long opt, options; unsigned long long opt, options;
if (!video || count + 1 > sizeof str) if (!video || count >= sizeof(str))
return -EINVAL; return -EINVAL;
status = acpi_video_bus_POST_options(video, &options); status = acpi_video_bus_POST_options(video, &options);
...@@ -1602,7 +1602,7 @@ acpi_video_bus_write_DOS(struct file *file, ...@@ -1602,7 +1602,7 @@ acpi_video_bus_write_DOS(struct file *file,
unsigned long opt; unsigned long opt;
if (!video || count + 1 > sizeof str) if (!video || count >= sizeof(str))
return -EINVAL; return -EINVAL;
if (copy_from_user(str, buffer, count)) if (copy_from_user(str, buffer, count))
......
...@@ -150,8 +150,6 @@ struct eeepc_hotk { ...@@ -150,8 +150,6 @@ struct eeepc_hotk {
/* The actual device the driver binds to */ /* The actual device the driver binds to */
static struct eeepc_hotk *ehotk; static struct eeepc_hotk *ehotk;
static void eeepc_rfkill_hotplug(bool real);
/* Platform device/driver */ /* Platform device/driver */
static int eeepc_hotk_thaw(struct device *device); static int eeepc_hotk_thaw(struct device *device);
static int eeepc_hotk_restore(struct device *device); static int eeepc_hotk_restore(struct device *device);
...@@ -345,16 +343,7 @@ static bool eeepc_wlan_rfkill_blocked(void) ...@@ -345,16 +343,7 @@ static bool eeepc_wlan_rfkill_blocked(void)
static int eeepc_rfkill_set(void *data, bool blocked) static int eeepc_rfkill_set(void *data, bool blocked)
{ {
unsigned long asl = (unsigned long)data; unsigned long asl = (unsigned long)data;
int ret; return set_acpi(asl, !blocked);
if (asl != CM_ASL_WLAN)
return set_acpi(asl, !blocked);
/* hack to avoid panic with rt2860sta */
if (blocked)
eeepc_rfkill_hotplug(false);
ret = set_acpi(asl, !blocked);
return ret;
} }
static const struct rfkill_ops eeepc_rfkill_ops = { static const struct rfkill_ops eeepc_rfkill_ops = {
...@@ -367,7 +356,8 @@ static void __devinit eeepc_enable_camera(void) ...@@ -367,7 +356,8 @@ static void __devinit eeepc_enable_camera(void)
* If the following call to set_acpi() fails, it's because there's no * If the following call to set_acpi() fails, it's because there's no
* camera so we can ignore the error. * camera so we can ignore the error.
*/ */
set_acpi(CM_ASL_CAMERA, 1); if (get_acpi(CM_ASL_CAMERA) == 0)
set_acpi(CM_ASL_CAMERA, 1);
} }
/* /*
...@@ -654,13 +644,13 @@ static int eeepc_get_adapter_status(struct hotplug_slot *hotplug_slot, ...@@ -654,13 +644,13 @@ static int eeepc_get_adapter_status(struct hotplug_slot *hotplug_slot,
return 0; return 0;
} }
static void eeepc_rfkill_hotplug(bool real) static void eeepc_rfkill_hotplug(void)
{ {
struct pci_dev *dev; struct pci_dev *dev;
struct pci_bus *bus; struct pci_bus *bus;
bool blocked = real ? eeepc_wlan_rfkill_blocked() : true; bool blocked = eeepc_wlan_rfkill_blocked();
if (real && ehotk->wlan_rfkill) if (ehotk->wlan_rfkill)
rfkill_set_sw_state(ehotk->wlan_rfkill, blocked); rfkill_set_sw_state(ehotk->wlan_rfkill, blocked);
mutex_lock(&ehotk->hotplug_lock); mutex_lock(&ehotk->hotplug_lock);
...@@ -703,7 +693,7 @@ static void eeepc_rfkill_notify(acpi_handle handle, u32 event, void *data) ...@@ -703,7 +693,7 @@ static void eeepc_rfkill_notify(acpi_handle handle, u32 event, void *data)
if (event != ACPI_NOTIFY_BUS_CHECK) if (event != ACPI_NOTIFY_BUS_CHECK)
return; return;
eeepc_rfkill_hotplug(true); eeepc_rfkill_hotplug();
} }
static void eeepc_hotk_notify(struct acpi_device *device, u32 event) static void eeepc_hotk_notify(struct acpi_device *device, u32 event)
...@@ -861,7 +851,7 @@ static int eeepc_hotk_restore(struct device *device) ...@@ -861,7 +851,7 @@ static int eeepc_hotk_restore(struct device *device)
{ {
/* Refresh both wlan rfkill state and pci hotplug */ /* Refresh both wlan rfkill state and pci hotplug */
if (ehotk->wlan_rfkill) if (ehotk->wlan_rfkill)
eeepc_rfkill_hotplug(true); eeepc_rfkill_hotplug();
if (ehotk->bluetooth_rfkill) if (ehotk->bluetooth_rfkill)
rfkill_set_sw_state(ehotk->bluetooth_rfkill, rfkill_set_sw_state(ehotk->bluetooth_rfkill,
...@@ -1004,7 +994,7 @@ static void eeepc_rfkill_exit(void) ...@@ -1004,7 +994,7 @@ static void eeepc_rfkill_exit(void)
* Refresh pci hotplug in case the rfkill state was changed after * Refresh pci hotplug in case the rfkill state was changed after
* eeepc_unregister_rfkill_notifier() * eeepc_unregister_rfkill_notifier()
*/ */
eeepc_rfkill_hotplug(true); eeepc_rfkill_hotplug();
if (ehotk->hotplug_slot) if (ehotk->hotplug_slot)
pci_hp_deregister(ehotk->hotplug_slot); pci_hp_deregister(ehotk->hotplug_slot);
...@@ -1120,7 +1110,7 @@ static int eeepc_rfkill_init(struct device *dev) ...@@ -1120,7 +1110,7 @@ static int eeepc_rfkill_init(struct device *dev)
* Refresh pci hotplug in case the rfkill state was changed during * Refresh pci hotplug in case the rfkill state was changed during
* setup. * setup.
*/ */
eeepc_rfkill_hotplug(true); eeepc_rfkill_hotplug();
exit: exit:
if (result && result != -ENODEV) if (result && result != -ENODEV)
......
...@@ -180,15 +180,15 @@ trip_point_type_show(struct device *dev, struct device_attribute *attr, ...@@ -180,15 +180,15 @@ trip_point_type_show(struct device *dev, struct device_attribute *attr,
switch (type) { switch (type) {
case THERMAL_TRIP_CRITICAL: case THERMAL_TRIP_CRITICAL:
return sprintf(buf, "critical"); return sprintf(buf, "critical\n");
case THERMAL_TRIP_HOT: case THERMAL_TRIP_HOT:
return sprintf(buf, "hot"); return sprintf(buf, "hot\n");
case THERMAL_TRIP_PASSIVE: case THERMAL_TRIP_PASSIVE:
return sprintf(buf, "passive"); return sprintf(buf, "passive\n");
case THERMAL_TRIP_ACTIVE: case THERMAL_TRIP_ACTIVE:
return sprintf(buf, "active"); return sprintf(buf, "active\n");
default: default:
return sprintf(buf, "unknown"); return sprintf(buf, "unknown\n");
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment