Message ID | 20210916082941.3421838-13-chenhuacai@loongson.cn (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | PCI/VGA: Rework default VGA device selection | expand |
Hi, Bjorn, On Thu, Sep 16, 2021 at 4:39 PM Huacai Chen <chenhuacai@loongson.cn> wrote: > > From: Bjorn Helgaas <bhelgaas@google.com> > > 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@google.com> > Signed-off-by: Huacai Chen <chenhuacai@loongson.cn> > --- > 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 >
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