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 <[email protected]>
What about use of GFP_ATOMIC in pcistub_reg_add()?
-boris
> ---
> drivers/xen/xen-pciback/pci_stub.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/xen/xen-pciback/pci_stub.c
> b/drivers/xen/xen-pciback/pci_stub.c
> index 9e480fd..95e6ddd 100644
> --- a/drivers/xen/xen-pciback/pci_stub.c
> +++ b/drivers/xen/xen-pciback/pci_stub.c
> @@ -577,7 +577,7 @@ static int pcistub_probe(struct pci_dev *dev, const
> struct pci_device_id *id)
> }
>
> if (!match) {
> - pci_dev_id = kmalloc(sizeof(*pci_dev_id), GFP_ATOMIC);
> + pci_dev_id = kmalloc(sizeof(*pci_dev_id), GFP_KERNEL);
> if (!pci_dev_id) {
> err = -ENOMEM;
> goto out;