Message ID | 20211015024025.2916363-1-imagedong@tencent.com (mailing list archive) |
---|---|
State | Changes Requested |
Delegated to: | Bjorn Helgaas |
Headers | show |
Series | [v2] pci: call cond_resched() after pci bus config writing | expand |
On Fri, Oct 15, 2021 at 10:40:25AM +0800, menglong8.dong@gmail.com wrote: > From: Menglong Dong <imagedong@tencent.com> > > While the system is running in KVM, pci config writing for virtio devices > may cost long time (about 1-2ms), as it causes VM-exit. During > __pci_bus_assign_resources(), pci_setup_bridge(), which can write pci > config up to 10 times, can be called many times without any > cond_resched(). So __pci_bus_assign_resources() can cause 25+ms > scheduling latency with !CONFIG_PREEMPT. > > To solve this problem, call cond_resched() after pci config writing. See https://lore.kernel.org/r/20211013190014.GA1909934@bhelgaas for comments about subject line, s/pci/PCI/, line length, etc. > Signed-off-by: Menglong Dong <imagedong@tencent.com> > --- > v2: > - use cond_resched() instead of _cond_resched() > --- > drivers/pci/access.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/drivers/pci/access.c b/drivers/pci/access.c > index 46935695cfb9..4c52a50f2c46 100644 > --- a/drivers/pci/access.c > +++ b/drivers/pci/access.c > @@ -57,6 +57,7 @@ int noinline pci_bus_write_config_##size \ > pci_lock_config(flags); \ > res = bus->ops->write(bus, devfn, pos, len, value); \ > pci_unlock_config(flags); \ > + cond_resched(); \ > return res; \ > } > > -- > 2.27.0 >
diff --git a/drivers/pci/access.c b/drivers/pci/access.c index 46935695cfb9..4c52a50f2c46 100644 --- a/drivers/pci/access.c +++ b/drivers/pci/access.c @@ -57,6 +57,7 @@ int noinline pci_bus_write_config_##size \ pci_lock_config(flags); \ res = bus->ops->write(bus, devfn, pos, len, value); \ pci_unlock_config(flags); \ + cond_resched(); \ return res; \ }