Hi, Bjorn, On Thu, Sep 16, 2021 at 4:39 PM Huacai Chen <chenhuacai@xxxxxxxxxxx> wrote: > > From: Bjorn Helgaas <bhelgaas@xxxxxxxxxx> > > The VGA arbiter is really PCI-specific and doesn't depend on any GPU > things. Move it to the PCI subsystem. I found a new problem, after moving vgaarb.c to drivers/pci, misc_register() in vga_arb_device_init() fails with -ENODEV, the root cause is still initcall order. Both vga_arb_device_init() and misc_init() are subsys_initcall(), and drivers/Makefile looks like this: obj-y += pci/ ...... obj-y += char/ ...... obj-y += gpu/ So vga_arb_device_init() in the pci directory runs before misc_init() in the char directory, and misc_register() fails. There are two methods to resolve: 1, keep vgaarb.c in drivers/gpu; 2, make vga_arb_device_init() to be subsys_initcall_sync(). I prefer the first one, but it seems you don't like both of them. Huacai > > Signed-off-by: Bjorn Helgaas <bhelgaas@xxxxxxxxxx> > Signed-off-by: Huacai Chen <chenhuacai@xxxxxxxxxxx> > --- > drivers/gpu/vga/Kconfig | 19 ------------------- > drivers/gpu/vga/Makefile | 1 - > drivers/pci/Kconfig | 19 +++++++++++++++++++ > drivers/pci/Makefile | 1 + > drivers/{gpu/vga => pci}/vgaarb.c | 0 > 5 files changed, 20 insertions(+), 20 deletions(-) > rename drivers/{gpu/vga => pci}/vgaarb.c (100%) > > diff --git a/drivers/gpu/vga/Kconfig b/drivers/gpu/vga/Kconfig > index 1ad4c4ef0b5e..eb8b14ab22c3 100644 > --- a/drivers/gpu/vga/Kconfig > +++ b/drivers/gpu/vga/Kconfig > @@ -1,23 +1,4 @@ > # SPDX-License-Identifier: GPL-2.0-only > -config VGA_ARB > - bool "VGA Arbitration" if EXPERT > - default y > - depends on (PCI && !S390) > - help > - Some "legacy" VGA devices implemented on PCI typically have the same > - hard-decoded addresses as they did on ISA. When multiple PCI devices > - are accessed at same time they need some kind of coordination. Please > - see Documentation/gpu/vgaarbiter.rst for more details. Select this to > - enable VGA arbiter. > - > -config VGA_ARB_MAX_GPUS > - int "Maximum number of GPUs" > - default 16 > - depends on VGA_ARB > - help > - Reserves space in the kernel to maintain resource locking for > - multiple GPUS. The overhead for each GPU is very small. > - > config VGA_SWITCHEROO > bool "Laptop Hybrid Graphics - GPU switching support" > depends on X86 > diff --git a/drivers/gpu/vga/Makefile b/drivers/gpu/vga/Makefile > index e92064442d60..9800620deda3 100644 > --- a/drivers/gpu/vga/Makefile > +++ b/drivers/gpu/vga/Makefile > @@ -1,3 +1,2 @@ > # SPDX-License-Identifier: GPL-2.0-only > -obj-$(CONFIG_VGA_ARB) += vgaarb.o > obj-$(CONFIG_VGA_SWITCHEROO) += vga_switcheroo.o > diff --git a/drivers/pci/Kconfig b/drivers/pci/Kconfig > index 0c473d75e625..7c9e56d7b857 100644 > --- a/drivers/pci/Kconfig > +++ b/drivers/pci/Kconfig > @@ -252,6 +252,25 @@ config PCIE_BUS_PEER2PEER > > endchoice > > +config VGA_ARB > + bool "VGA Arbitration" if EXPERT > + default y > + depends on (PCI && !S390) > + help > + Some "legacy" VGA devices implemented on PCI typically have the same > + hard-decoded addresses as they did on ISA. When multiple PCI devices > + are accessed at same time they need some kind of coordination. Please > + see Documentation/gpu/vgaarbiter.rst for more details. Select this to > + enable VGA arbiter. > + > +config VGA_ARB_MAX_GPUS > + int "Maximum number of GPUs" > + default 16 > + depends on VGA_ARB > + help > + Reserves space in the kernel to maintain resource locking for > + multiple GPUS. The overhead for each GPU is very small. > + > source "drivers/pci/hotplug/Kconfig" > source "drivers/pci/controller/Kconfig" > source "drivers/pci/endpoint/Kconfig" > diff --git a/drivers/pci/Makefile b/drivers/pci/Makefile > index d62c4ac4ae1b..ebe720f69b15 100644 > --- a/drivers/pci/Makefile > +++ b/drivers/pci/Makefile > @@ -29,6 +29,7 @@ obj-$(CONFIG_PCI_PF_STUB) += pci-pf-stub.o > obj-$(CONFIG_PCI_ECAM) += ecam.o > obj-$(CONFIG_PCI_P2PDMA) += p2pdma.o > obj-$(CONFIG_XEN_PCIDEV_FRONTEND) += xen-pcifront.o > +obj-$(CONFIG_VGA_ARB) += vgaarb.o > > # Endpoint library must be initialized before its users > obj-$(CONFIG_PCI_ENDPOINT) += endpoint/ > diff --git a/drivers/gpu/vga/vgaarb.c b/drivers/pci/vgaarb.c > similarity index 100% > rename from drivers/gpu/vga/vgaarb.c > rename to drivers/pci/vgaarb.c > -- > 2.27.0 >