[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAErSpo70VKFxJqyZJKSp=CZ2x131Kz_+0vah3juTEuEx5RLX8A@mail.gmail.com>
Date: Fri, 5 Jul 2013 17:36:01 -0600
From: Bjorn Helgaas <bhelgaas@...gle.com>
To: Alexander Duyck <alexander.h.duyck@...el.com>
Cc: "linux-pci@...r.kernel.org" <linux-pci@...r.kernel.org>,
"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
Rusty Russell <rusty@...tcorp.com.au>
Subject: Re: [PATCH] pci: Avoid unnecessary calls to work_on_cpu
[+cc Rusty]
On Mon, Jun 24, 2013 at 2:05 PM, Alexander Duyck
<alexander.h.duyck@...el.com> wrote:
> This patch is meant to address the fact that we are making unnecessary calls
> to work_on_cpu. To resolve this I have added a check to see if the current
> node is the correct node for the device before we decide to assign the probe
> task to another CPU.
>
> The advantages to this approach is that we can avoid reentrant calls to
> work_on_cpu. In addition we should not make any calls to setup the work
> remotely in the case of a single node system that has NUMA enabled.
The description above makes it sound like this is just a minor
performance enhancement, but I think the real reason you want this is
to resolve the lockdep warning mentioned at [1]. That thread is long
and confusing, so I'd like to see a bugzilla that distills out the
useful details, and a synopsis in this changelog.
[1] https://lkml.kernel.org/r/1368498506-25857-7-git-send-email-yinghai@kernel.org
> Signed-off-by: Alexander Duyck <alexander.h.duyck@...el.com>
> ---
>
> This patch is based off of work I submitted in an earlier patch that I never
> heard back on. The change was originally submitted in:
> pci: Avoid reentrant calls to work_on_cpu
>
> I'm not sure what ever happened with that patch, however after reviewing it
> some myself I decided I could do without the change to the comments since they
> were unneeded. As such I am resubmitting this as a much simpler patch that
> only adds the line of code needed to avoid calling work_on_cpu for every call
> to probe on an NUMA node specific device.
>
> drivers/pci/pci-driver.c | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
> index 79277fb..7d81713 100644
> --- a/drivers/pci/pci-driver.c
> +++ b/drivers/pci/pci-driver.c
> @@ -282,7 +282,7 @@ static int pci_call_probe(struct pci_driver *drv, struct pci_dev *dev,
> its local memory on the right node without any need to
> change it. */
> node = dev_to_node(&dev->dev);
> - if (node >= 0) {
> + if ((node >= 0) && (node != numa_node_id())) {
> int cpu;
>
> get_online_cpus();
I think it's theoretically unsafe to use numa_node_id() while
preemption is enabled.
It seems a little strange to me that this "run the driver probe method
on the correct node" code is in PCI. I would think this behavior
would be desirable for *all* bus types, not just PCI, so maybe it
would make sense to do this up in device_attach() or somewhere
similar.
But Rusty added this (in 873392ca51), and he knows way more about this
stuff than I do.
Bjorn
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists