Thread (7 messages) 7 messages, 5 authors, 2014-03-10

Re: [patch] x86/efi: use GFP_ATOMIC under spin_lock

From: Dan Carpenter <hidden>
Date: 2014-03-07 12:25:37
Also in: kernel-janitors

Possibly related (same subject, not in this thread)

On Fri, Mar 07, 2014 at 01:10:22PM +0100, Ingo Molnar wrote:
* Dan Carpenter [off-list ref] wrote:
quoted
In phys_efi_get_time() we call efi_call_phys_prelog() with a spin_lock
so this allocation should be atomic.

Fixes: b8f2c21db390 ('efi, x86: Pass a proper identity mapping in efi_call_phys_prelog')
Signed-off-by: Dan Carpenter <redacted>
diff --git a/arch/x86/platform/efi/efi_64.c b/arch/x86/platform/efi/efi_64.c
index 0c2a234fef1e..f5adcadb381b 100644
--- a/arch/x86/platform/efi/efi_64.c
+++ b/arch/x86/platform/efi/efi_64.c
@@ -90,7 +90,7 @@ void __init efi_call_phys_prelog(void)
 	local_irq_save(efi_flags);
 
 	n_pgds = DIV_ROUND_UP((max_pfn << PAGE_SHIFT), PGDIR_SIZE);
-	save_pgd = kmalloc(n_pgds * sizeof(pgd_t), GFP_KERNEL);
+	save_pgd = kmalloc(n_pgds * sizeof(pgd_t), GFP_ATOMIC);
 
 	for (pgd = 0; pgd < n_pgds; pgd++) {
 		save_pgd[pgd] = *pgd_offset_k(pgd * PGDIR_SIZE);
The allocation there, if it happens within a spinlocked path, is 
probably a layering violation - and GFP_ATOMIC is at best a 
workaround.
You're on your own for fixing the complicated stuff like layering
violations. I just do static checker stuff and sed fixes.  ;)

regards,
dan carpenter
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help