PCI/P2PDMA: Use percpu_ref_tryget_live_rcu() inside RCU critical section
authorChristophe JAILLET <christophe.jaillet@wanadoo.fr>
Wed, 3 Nov 2021 21:16:53 +0000 (22:16 +0100)
committerBjorn Helgaas <bhelgaas@google.com>
Wed, 15 Dec 2021 22:13:13 +0000 (16:13 -0600)
Since pci_alloc_p2pmem() has already called rcu_read_lock(), we're in an
RCU read-side critical section and don't need to take the lock again.  Use
percpu_ref_tryget_live_rcu() instead of percpu_ref_tryget_live() to save a
few cycles.

[bhelgaas: commit log]
Link: https://lore.kernel.org/r/ab80164f4d5b32f9e6240aa4863c3a147ff9c89f.1635974126.git.christophe.jaillet@wanadoo.fr
Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Krzysztof WilczyƄski <kw@linux.com>
Reviewed-by: Logan Gunthorpe <logang@deltatee.com>
drivers/pci/p2pdma.c

index 8d47cb7218d15993b9e274debb08d0f5f89e834e..081c391690d45c8860898c610b653d1a95a8d99f 100644 (file)
@@ -710,7 +710,7 @@ void *pci_alloc_p2pmem(struct pci_dev *pdev, size_t size)
        if (!ret)
                goto out;
 
-       if (unlikely(!percpu_ref_tryget_live(ref))) {
+       if (unlikely(!percpu_ref_tryget_live_rcu(ref))) {
                gen_pool_free(p2pdma->pool, (unsigned long) ret, size);
                ret = NULL;
                goto out;