From: Alex Williamson <alex.williamson@redhat.com>
To: Jason Gunthorpe <jgg@nvidia.com>
Cc: "Tian, Kevin" <kevin.tian@intel.com>,
"kvm@vger.kernel.org" <kvm@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"Liu, Yi L" <yi.l.liu@intel.com>,
"Nicolin Chen" <nicolinc@nvidia.com>,
"Lu, Baolu" <baolu.lu@intel.com>
Subject: Re: vPASID capability for VF
Date: Tue, 9 May 2023 18:31:11 -0600 [thread overview]
Message-ID: <20230509183111.6a4a7f39.alex.williamson@redhat.com> (raw)
In-Reply-To: <BN9PR11MB52760816DC23D5322A4318228C769@BN9PR11MB5276.namprd11.prod.outlook.com>
On Tue, 9 May 2023 23:41:44 +0000
"Tian, Kevin" <kevin.tian@intel.com> wrote:
> > From: Jason Gunthorpe <jgg@nvidia.com>
> > Sent: Wednesday, May 10, 2023 7:13 AM
> >
> > On Tue, May 09, 2023 at 10:57:04PM +0000, Tian, Kevin wrote:
> > > > From: Jason Gunthorpe <jgg@nvidia.com>
> > > > Sent: Wednesday, May 10, 2023 6:44 AM
> > > >
> > > > On Tue, May 09, 2023 at 08:34:53AM +0000, Tian, Kevin wrote:
> > > > > According to PCIe spec (7.8.9 PASID Extended Capability Structure):
> > > > >
> > > > > The PASID configuration of the single non-VF Function representing
> > > > > the device is also used by all VFs in the device. A PF is permitted
> > > > > to implement the PASID capability, but VFs must not implement it.
> > > > >
> > > > > To enable PASID on VF then one open is where to locate the PASID
> > > > > capability in VF's vconfig space. vfio-pci doesn't know which offset
> > > > > may contain VF specific config registers. Finding such offset must
> > > > > come from a device specific knowledge.
> > > >
> > > > Why? Can't vfio probe the cap tree and just find a gap to insert a new
> > > > cap? We already mangle the cap list, I'm not sure I see what
> > > > the problem is?
> > > >
> > >
> > > PCI config space includes not only caps, but also device specific
> > > defined fields. e.g. Intel IGD defines offset 0xfc as a pointer to
> > > OpRegion. I'm sure Alex can give many other examples.
> >
> > Do we even expose those over VIFO? I thought in general we blocked of
>
> Yes. I did a quick check:
>
> /*
> * Default unassigned regions to raw read-write access. Some devices
> * require this to function as they hide registers between the gaps in
> * config space (be2net). Like MMIO and I/O port registers, we have
> * to trust the hardware isolation.
> */
> static struct perm_bits unassigned_perms = {
> .readfn = vfio_raw_config_read,
> .writefn = vfio_raw_config_write
> };
>
> vfio_config_do_rw()
> {
> ...
> if (cap_id == PCI_CAP_ID_INVALID) {
> perm = &unassigned_perms;
> cap_start = *ppos;
> } ...
> }
>
> vfio_config_init()
> {
> ...
> memset(map, PCI_CAP_ID_BASIC, PCI_STD_HEADER_SIZEOF);
> memset(map + PCI_STD_HEADER_SIZEOF, PCI_CAP_ID_INVALID,
> pdev->cfg_size - PCI_STD_HEADER_SIZEOF);
> ...
> }
>
> > various parts of the config space. I keep seeing patches to unblock
> > parts of config space?
> >
> > I'd do the reverse and say devices that want to pass parts of their
> > config space should have a special hook to do it and otherwise we
> > should sanitize and block?
>
> This then may break backward compatibility. We don't know how
> many devices have such hidden registers so if anyone misses a hook
> immediately it cannot be assigned after we start blocking as default.
>
> >
> > eg we already have a hook to pass the opregion
> >
> > > So it's easy to find the gap between caps, but not easy to know
> > > whether that gap is actually free to use.
> >
> > Because, let's face it, this is a horrible thing to do, and the
> > opregion stuff is just ugly as s sin.
> >
>
> It's ugly, but that is the reality. :/
Have a peak at the config space of an NVIDIA GPU and tell me which of
those non-zero fields between capabilities are used as well. Glass
houses... ;-)
IIRC we originally needed to enable this for a Broadcom NIC that
stuffed device specific registers in un-architected config space. The
capabilities we're {un}hiding are architected things that we know are
unsupported or unsafe, the gaps, just like device specific
capabilities, we're obliged to expose for functionality. Thanks,
Alex
next prev parent reply other threads:[~2023-05-10 0:32 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-09 8:34 Tian, Kevin
2023-05-09 22:43 ` Jason Gunthorpe
2023-05-09 22:57 ` Tian, Kevin
2023-05-09 23:13 ` Jason Gunthorpe
2023-05-09 23:41 ` Tian, Kevin
2023-05-10 0:31 ` Alex Williamson [this message]
2023-05-10 0:59 ` Jason Gunthorpe
2023-05-10 2:16 ` Tian, Kevin
2023-05-10 20:39 ` Jason Gunthorpe
2023-05-11 7:42 ` Tian, Kevin
2023-05-10 17:24 ` Alex Williamson
2023-05-10 20:15 ` Jason Gunthorpe
2023-05-11 7:27 ` Tian, Kevin
2023-05-11 11:34 ` Baolu Lu
2023-05-12 2:59 ` Tian, Kevin
2023-05-12 21:01 ` Jason Gunthorpe
2023-05-17 5:09 ` Tian, Kevin
2023-05-11 15:45 ` Alex Williamson
2023-05-12 2:52 ` Tian, Kevin
2023-05-17 5:22 ` Tian, Kevin
2023-07-27 1:17 ` Tian, Kevin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230509183111.6a4a7f39.alex.williamson@redhat.com \
--to=alex.williamson@redhat.com \
--cc=baolu.lu@intel.com \
--cc=jgg@nvidia.com \
--cc=kevin.tian@intel.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=nicolinc@nvidia.com \
--cc=yi.l.liu@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®