[PATCH V6 12/12] PCI/VGA: Move vgaarb to drivers/pci
Huacai Chen
chenhuacai at gmail.com
Sun Sep 26 03:07:37 UTC 2021
Hi, Bjorn,
On Thu, Sep 16, 2021 at 4:39 PM Huacai Chen <chenhuacai at loongson.cn> wrote:
>
> From: Bjorn Helgaas <bhelgaas at 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 at google.com>
> Signed-off-by: Huacai Chen <chenhuacai at 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
>
More information about the dri-devel
mailing list