Received: by 2002:a05:6358:3188:b0:123:57c1:9b43 with SMTP id q8csp1694241rwd; Thu, 15 Jun 2023 14:23:27 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6wcLb4wX56NMPn4naDVuj4shBzd5uQ/uE40yt2ouiOnq+qUZhHPGR95zBA2kCIZ5auaFI5 X-Received: by 2002:a05:6a00:39a4:b0:654:9d3a:f962 with SMTP id fi36-20020a056a0039a400b006549d3af962mr279077pfb.12.1686864206641; Thu, 15 Jun 2023 14:23:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1686864206; cv=none; d=google.com; s=arc-20160816; b=bA2DDqYbm2MP0FxVJ9OwFaUkhwCIfaZRkCtO7nvaJABS5cdP8lG5f+tjqQ7aO+l+en mZb7G8hBYfgmVxBzgiqmGb/N4oNDsBcvVSwfx2Gb8naQ31KLXLNaaaEb5yaiXz+A/J2Z mhEnF2gPKF6Du319LlWd53pnPYItCwtwvYKFt94jmrVpmRPFxoAMqZvXz/HMp4VZ2XIk 3Ew0X+ZFzfMAmyZhE5YpuohqSOAq58ZNYtfdDEeMhYJ+rg+giU/q+5Jyx2TCcAbIy2Sr iYLGnHqLbPXvAO16ntt2c3WQJG9F7JRojXE50XkRGymFGUsgGFESIusGV+n4xaIVv0As WdEQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:cc:to:subject :message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=cYFIoxmK6/11WcQGMEd3k+GSDGPqNwcIqNk05D0COTE=; b=i05I8PIk1e+rGS/M8Q42LcBS7IkFsl6FHPqDxQPALa90ybtV1Z22qxBtJuXnHXk6yZ H0cbM/xcdFqxlnzz76aZFLDtVqdIHovPbaG9ILD2DDZ+4e6Nu6OnRx5hYh438zS+fZCq hEwKAj9biFSwM+xbqzL778Bf8ZH5/neBPRiJsxYtzq0xwoAwUbbkv5ZzSBs5+Zj6QvSa 0yLoEd5whQH0PVfBaEUFHAGCkUa9De4F19tKhKeCbO8F1Z9jcuFsjyflhgLR+vI4l3jw t0FwvTI6lLq8tZk6Dppqj6+bo+J7oFW6/sV2EGjI/h2Yx+shBGfXtkjBF/5dJ+p+rDRo VnBw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20221208 header.b=Ctj8OnhG; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id o22-20020aa79796000000b006515278f780si10408853pfp.132.2023.06.15.14.23.15; Thu, 15 Jun 2023 14:23:26 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20221208 header.b=Ctj8OnhG; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234786AbjFOVMM (ORCPT + 99 others); Thu, 15 Jun 2023 17:12:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58752 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229563AbjFOVML (ORCPT ); Thu, 15 Jun 2023 17:12:11 -0400 Received: from mail-oo1-xc2b.google.com (mail-oo1-xc2b.google.com [IPv6:2607:f8b0:4864:20::c2b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 02AAEC3; Thu, 15 Jun 2023 14:12:10 -0700 (PDT) Received: by mail-oo1-xc2b.google.com with SMTP id 006d021491bc7-55b3b3e2928so1860655eaf.2; Thu, 15 Jun 2023 14:12:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1686863529; x=1689455529; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=cYFIoxmK6/11WcQGMEd3k+GSDGPqNwcIqNk05D0COTE=; b=Ctj8OnhGP2r2mDaRqVkWYkbCXLxlBOU1XnLMs2rQnEZVFtLbX4y/91GeJfTZJq5ilZ BEBJVQLtXSa74ZV6v9HQtOkzjDigIp47DOIRcrHwGUcKTsqQAhkMdn1UO87Sb7Gpm7ex X45UZ0QhVvOtmv5xonVSE+x+ADmFWyurK8i6hsId3TXKamH0UIU6FCtus2oYmyYc/hXN aKVQWGwGuIgL3W0ZwDOUERyeYftA7rlPAK83m58oUSPJYAdDpFEgGtRYfhALMGIZvZ2b gofXVCoULo3vxmDnvGTZQX+wnBV6wdCwVEVCg+rvInQGzr6Uhq9I2bWmhZs/WkNDiQrK W5gw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686863529; x=1689455529; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=cYFIoxmK6/11WcQGMEd3k+GSDGPqNwcIqNk05D0COTE=; b=dNtcaH59WEHGWqVkytgnGRWeIUxTzLPyv4qPFosKJw+iCgSWdW9C6j+pd05uwqDPm4 Q5Vmdo0rZiCSp6G2f3Vet4ISTvXR+BRu/5zP7FL1xG6ycLlQkNxyrh9de1zN6e7wBD48 sX93BPbVFzPCj3Cz4iFeRnRuWJgyXiGXPT9tRNgRNfGVnLhqLLBvNTUo/EMNaIl6W/Qh XZnf+x4JRCb7y0pLs0rccU7Aj/Om7ip2JT6XxJr8898YzZZOdYHFCs9lhK/dJBPlEwL1 AxRXOrN9h8NUKefUE1Lkuc9/BLUjV+Y0M6FRmlnkdg1ZaLf5E6BHZ6Mkc8VSHpjMdFQN 22Fw== X-Gm-Message-State: AC+VfDxa8UGHoIV8PqA7pHLEGrUmaSx0B3G9lLK23G+3x+AHhNeeRCgN 6ktk1RStX5rvuz2EAKfWnOWtMdI6zaDBSaeu+Aw= X-Received: by 2002:a05:6871:6ba6:b0:19f:ad5a:f518 with SMTP id zh38-20020a0568716ba600b0019fad5af518mr274084oab.25.1686863529246; Thu, 15 Jun 2023 14:12:09 -0700 (PDT) MIME-Version: 1.0 References: <20230613030151.216625-1-15330273260@189.cn> <20230613030151.216625-3-15330273260@189.cn> In-Reply-To: From: Alex Deucher Date: Thu, 15 Jun 2023 17:11:58 -0400 Message-ID: Subject: Re: [PATCH v7 2/8] PCI/VGA: Deal only with VGA class devices To: Sui Jingfeng Cc: Sui Jingfeng <15330273260@189.cn>, Bjorn Helgaas , linux-fbdev@vger.kernel.org, kvm@vger.kernel.org, nouveau@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-pci@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Jun 14, 2023 at 6:50=E2=80=AFAM Sui Jingfeng wrote: > > Hi, > > On 2023/6/13 11:01, Sui Jingfeng wrote: > > From: Sui Jingfeng > > > > Deal only with the VGA devcie(pdev->class =3D=3D 0x0300), so replace th= e > > pci_get_subsys() function with pci_get_class(). Filter the non-PCI disp= lay > > device(pdev->class !=3D 0x0300) out. There no need to process the non-d= isplay > > PCI device. > > > > Cc: Bjorn Helgaas > > Signed-off-by: Sui Jingfeng > > --- > > drivers/pci/vgaarb.c | 22 ++++++++++++---------- > > 1 file changed, 12 insertions(+), 10 deletions(-) > > > > diff --git a/drivers/pci/vgaarb.c b/drivers/pci/vgaarb.c > > index c1bc6c983932..22a505e877dc 100644 > > --- a/drivers/pci/vgaarb.c > > +++ b/drivers/pci/vgaarb.c > > @@ -754,10 +754,6 @@ static bool vga_arbiter_add_pci_device(struct pci_= dev *pdev) > > struct pci_dev *bridge; > > u16 cmd; > > > > - /* Only deal with VGA class devices */ > > - if ((pdev->class >> 8) !=3D PCI_CLASS_DISPLAY_VGA) > > - return false; > > - > > Hi, here is probably a bug fixing. > > For an example, nvidia render only GPU typically has 0x0380. > > at its PCI class number, but render only GPU should not participate in > the arbitration. > > As it shouldn't snoop the legacy fixed VGA address. > > It(render only GPU) can not display anything. > > > But 0x0380 >> 8 =3D 0x03, the filter failed. > > > > /* Allocate structure */ > > vgadev =3D kzalloc(sizeof(struct vga_device), GFP_KERNEL); > > if (vgadev =3D=3D NULL) { > > @@ -1500,7 +1496,9 @@ static int pci_notify(struct notifier_block *nb, = unsigned long action, > > struct pci_dev *pdev =3D to_pci_dev(dev); > > bool notify =3D false; > > > > - vgaarb_dbg(dev, "%s\n", __func__); > > + /* Only deal with VGA class devices */ > > + if (pdev->class !=3D PCI_CLASS_DISPLAY_VGA << 8) > > + return 0; > > So here we only care 0x0300, my initial intent is to make an optimization= , > > nowadays sane display graphic card should all has 0x0300 as its PCI > class number, is this complete right? > > ``` > > #define PCI_BASE_CLASS_DISPLAY 0x03 > #define PCI_CLASS_DISPLAY_VGA 0x0300 > #define PCI_CLASS_DISPLAY_XGA 0x0301 > #define PCI_CLASS_DISPLAY_3D 0x0302 > #define PCI_CLASS_DISPLAY_OTHER 0x0380 > > ``` > > Any ideas ? I'm not quite sure what you are asking about here. For vga_arb, we only care about VGA class devices since those should be on the only ones that might have VGA routed to them. However, as VGA gets deprecated, you'll have more non VGA PCI classes for devices which could be the pre-OS console device. Alex > > > /* For now we're only intereted in devices added and removed. I d= idn't > > * test this thing here, so someone needs to double check for the > > @@ -1510,6 +1508,8 @@ static int pci_notify(struct notifier_block *nb, = unsigned long action, > > else if (action =3D=3D BUS_NOTIFY_DEL_DEVICE) > > notify =3D vga_arbiter_del_pci_device(pdev); > > > > + vgaarb_dbg(dev, "%s: action =3D %lu\n", __func__, action); > > + > > if (notify) > > vga_arbiter_notify_clients(); > > return 0; > > @@ -1534,8 +1534,8 @@ static struct miscdevice vga_arb_device =3D { > > > > static int __init vga_arb_device_init(void) > > { > > + struct pci_dev *pdev =3D NULL; > > int rc; > > - struct pci_dev *pdev; > > > > rc =3D misc_register(&vga_arb_device); > > if (rc < 0) > > @@ -1545,11 +1545,13 @@ static int __init vga_arb_device_init(void) > > > > /* We add all PCI devices satisfying VGA class in the arbiter by > > * default */ > > - pdev =3D NULL; > > - while ((pdev =3D > > - pci_get_subsys(PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, > > - PCI_ANY_ID, pdev)) !=3D NULL) > > + while (1) { > > + pdev =3D pci_get_class(PCI_CLASS_DISPLAY_VGA << 8, pdev); > > + if (!pdev) > > + break; > > + > > vga_arbiter_add_pci_device(pdev); > > + } > > > > pr_info("loaded\n"); > > return rc; > > -- > Jingfeng >