On 2018/4/10 22:27, Boris Ostrovsky wrote: > On 04/09/2018 11:03 AM, Jia-Ju Bai wrote: >> pcistub_probe() is never called in atomic context. >> This function is only set as ".probe" in struct pci_driver. >> >> Despite never getting called from atomic context, >> pcistub_probe() calls kmalloc() with GFP_ATOMIC, >> which does not sleep for allocation. >> GFP_ATOMIC is not necessary and can be replaced with GFP_KERNEL, >> which can sleep and improve the possibility of sucessful allocation. >> >> This is found by a static analysis tool named DCNS written by myself. >> And I also manually check it. >> >> Signed-off-by: Jia-Ju Bai > What about use of GFP_ATOMIC in pcistub_reg_add()? Thanks for your reply :) I find pcistub_reg_add() is called by pcistub_quirk_add(). And pcistub_quirk_add() is called in the macro DRIVER_ATTR(). I am not sure whether DRIVER_ATTR() can make the function called in atomic context, so I do not analyze it in my tool. Best wishes, Jia-Ju Bai