[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