mirror of
https://github.com/followmsi/android_kernel_google_msm.git
synced 2024-11-06 23:17:41 +00:00
dell-laptop: Fix allocating & freeing SMI buffer page
commit b8830a4e71b15d0364ac8e6c55301eea73f211da upstream. This commit fix kernel crash when probing for rfkill devices in dell-laptop driver failed. Function free_page() was incorrectly used on struct page * instead of virtual address of SMI buffer. This commit also simplify allocating page for SMI buffer by using __get_free_page() function instead of sequential call of functions alloc_page() and page_address(). Signed-off-by: Pali Rohár <pali.rohar@gmail.com> Acked-by: Michal Hocko <mhocko@suse.cz> Signed-off-by: Darren Hart <dvhart@linux.intel.com> [lizf: Backported to 3.4: adjust context] Signed-off-by: Zefan Li <lizefan@huawei.com>
This commit is contained in:
parent
019db118fe
commit
800e58ae21
1 changed files with 3 additions and 5 deletions
|
@ -216,7 +216,6 @@ static struct dmi_system_id __devinitdata dell_quirks[] = {
|
|||
};
|
||||
|
||||
static struct calling_interface_buffer *buffer;
|
||||
static struct page *bufferpage;
|
||||
static DEFINE_MUTEX(buffer_mutex);
|
||||
|
||||
static int hwswitch_state;
|
||||
|
@ -714,11 +713,10 @@ static int __init dell_init(void)
|
|||
* Allocate buffer below 4GB for SMI data--only 32-bit physical addr
|
||||
* is passed to SMI handler.
|
||||
*/
|
||||
bufferpage = alloc_page(GFP_KERNEL | GFP_DMA32);
|
||||
buffer = (void *)__get_free_page(GFP_KERNEL | GFP_DMA32);
|
||||
|
||||
if (!bufferpage)
|
||||
if (!buffer)
|
||||
goto fail_buffer;
|
||||
buffer = page_address(bufferpage);
|
||||
|
||||
ret = dell_setup_rfkill();
|
||||
|
||||
|
@ -787,7 +785,7 @@ fail_backlight:
|
|||
fail_filter:
|
||||
dell_cleanup_rfkill();
|
||||
fail_rfkill:
|
||||
free_page((unsigned long)bufferpage);
|
||||
free_page((unsigned long)buffer);
|
||||
fail_buffer:
|
||||
platform_device_del(platform_device);
|
||||
fail_platform_device2:
|
||||
|
|
Loading…
Reference in a new issue