Re: Possible broken MM code in dell-laptop.c?

Michal Hocko
2015-06-15T21:18:32Z

On Sun 14-06-15 11:05:07, Pali Rohár wrote:
> Hello,
>
> in drivers/platform/x86/dell-laptop.c is this part of code:
>
> 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 = page_address(bufferpage);
[...]
> fail_rfkill:
> free_page((unsigned long)bufferpage);

This one should be __free_page because it consumes struct page* and it
is the proper counter part for alloc_page. free_page, just to make it
confusing, consumes an address which has to be translated to a struct
page.

I have no idea why the API has been done this way and yeah, it is really
confusing.

[...]
> static void __exit dell_exit(void)
> {
> ...
> free_page((unsigned long)buffer);

--
Michal Hocko
SUSE Labs