On Wed, Dec 18, 2024 at 08:59:51PM +0900, Ryo Takakura wrote: > PCI config access is locked with pci_lock which serializes > pci_user/bus_write_config*() and pci_user/bus_read_config*(). > The subsequently invoked vmd_pci_write() and vmd_pci_read() are also > serialized as they are only invoked by them respectively. > > Remove cfg_lock which is taken by vmd_pci_write() and vmd_pci_read() > for their serialization as its already serialized by pci_lock. That's only true if CONFIG_PCI_LOCKLESS_CONFIG isn't set, so pci_lock won't help with concurrent kernel config access in such a setup. I think the previous change to raw lock proposal was the correct approach. > @@ -385,13 +384,11 @@ static int vmd_pci_read(struct pci_bus *bus, unsigned int devfn, int reg, > { > struct vmd_dev *vmd = vmd_from_bus(bus); > void __iomem *addr = vmd_cfg_addr(vmd, bus, devfn, reg, len); > - unsigned long flags; > int ret = 0; > > if (!addr) > return -EFAULT; > > - spin_lock_irqsave(&vmd->cfg_lock, flags); > switch (len) { > case 1: > *value = readb(addr); There's a comment above this function explaining the need for the lock, which doesn't make a lot of sense after this patch.