percpu: avoid calling __pcpu_ptr_to_addr(NULL)
__pcpu_ptr_to_addr() can be overridden by the architecture and might not behave well if passed a NULL pointer. So avoid calling it until we have verified that its arg is not NULL. Cc: Rusty Russell <rusty@rustcorp.com.au> Cc: Kamalesh Babulal <kamalesh@linux.vnet.ibm.com> Acked-by: Tejun Heo <tj@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
8767ba2796
commit
129182e562
@@ -1271,7 +1271,7 @@ static void pcpu_reclaim(struct work_struct *work)
|
|||||||
*/
|
*/
|
||||||
void free_percpu(void *ptr)
|
void free_percpu(void *ptr)
|
||||||
{
|
{
|
||||||
void *addr = __pcpu_ptr_to_addr(ptr);
|
void *addr;
|
||||||
struct pcpu_chunk *chunk;
|
struct pcpu_chunk *chunk;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
int off;
|
int off;
|
||||||
@@ -1279,6 +1279,8 @@ void free_percpu(void *ptr)
|
|||||||
if (!ptr)
|
if (!ptr)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
addr = __pcpu_ptr_to_addr(ptr);
|
||||||
|
|
||||||
spin_lock_irqsave(&pcpu_lock, flags);
|
spin_lock_irqsave(&pcpu_lock, flags);
|
||||||
|
|
||||||
chunk = pcpu_chunk_addr_search(addr);
|
chunk = pcpu_chunk_addr_search(addr);
|
||||||
|
Reference in New Issue
Block a user