mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Xu Yilun <yilun.xu@linux.intel.com>
To: matthew.gerlach@linux.intel.com
Cc: hao.wu@intel.com, trix@redhat.com, mdf@kernel.org,
	yilun.xu@intel.com, linux-fpga@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2] fpga: dfl: afu: support Rev 2 of DFL Port feature
Date: Sun, 18 Feb 2024 11:23:18 +0800	[thread overview]
Message-ID: <ZdF4JvYQQL8irnbW@yilunxu-OptiPlex-7050> (raw)
In-Reply-To: <alpine.DEB.2.22.394.2402051600190.122158@sj-4150-psse-sw-opae-dev2>

On Wed, Feb 07, 2024 at 08:40:55AM -0800, matthew.gerlach@linux.intel.com wrote:
> 
> 
> On Mon, 5 Feb 2024, Xu Yilun wrote:
> 
> > On Wed, Jan 31, 2024 at 04:26:27PM -0800, matthew.gerlach@linux.intel.com wrote:
> > > 
> > > 
> > > On Wed, 31 Jan 2024, Xu Yilun wrote:
> > > 
> > > > On Tue, Jan 30, 2024 at 10:00:16AM -0800, matthew.gerlach@linux.intel.com wrote:
> > > > > 
> > > > > 
> > > > > On Tue, 30 Jan 2024, Xu Yilun wrote:
> > > > > 
> > > > > > On Thu, Jan 25, 2024 at 03:37:15PM -0800, Matthew Gerlach wrote:
> > > > > > > Revision 2 of the Device Feature List (DFL) Port feature
> > > > > > > adds support for connecting the contents of the port to
> > > > > > > multiple PCIe Physical Functions (PF).
> > > > > > > 
> > > > > > > This new functionality requires changing the port reset
> > > > > > > behavior during FPGA and software initialization from
> > > > > > > revision 1 of the port feature. With revision 1, the initial
> > > > > > > state of the logic inside the port was not guaranteed to
> > > > > > > be valid until a port reset was performed by software during
> > > > > > > driver initialization. With revision 2, the initial state
> > > > > > > of the logic inside the port is guaranteed to be valid,
> > > > > > > and a port reset is not required during driver initialization.
> > > > > > > 
> > > > > > > This change in port reset behavior avoids a potential race
> > > > > > > condition during PCI enumeration when a port is connected to
> > > > > > > multiple PFs. Problems can occur if the driver attached to
> > > > > > > the PF managing the port asserts reset in its probe function
> > > > > > > when a driver attached to another PF accesses the port in its
> > > > > > > own probe function. The potential problems include failed or hung
> > > > > > 
> > > > > > Only racing during probe functions? I assume any time port_reset()
> > > > > > would fail TLPs for the other PF. And port_reset() could be triggered
> > > > > > at runtime by ioctl().
> > > > > 
> > > > > Yes, a port_reset() triggered by ioctl could result in failed TLP for the
> > > > > other PFs. The user space SW performing the ioctl needs to ensure all PFs
> > > > > involved are properly quiesced before the port_reset is performed.
> > > > 
> > > > How would user get an insight into other PF drivers to know everything
> > > > is quiesced?  I mean do we need driver level management for this?
> > > 
> > > Since this is an FPGA, the number of other PFs and the drivers bound to
> > > those PFs depends on the FPGA image. There would also be user space software
> > > stacks involved with the other PFs as well. The user would have to ensure
> > > all the SW stacks and drivers are quiesced as appropriate for the FPGA
> > 
> > User may not know everything about the device, they only get part of the
> > controls that drivers grant. This is still true for vfio + userspace
> > drivers.
> 
> A user performing a port reset would have to know the impact to the specific
> FPGA image being run in order to ensure all SW stacks are ready for the
> reset.

We are not going to change the logic of the whole driver model just
because the device is backed up by an FPGA image.  The *driver* should be
fully responsible for matched devices.  A HW reset unaware to the
device driver is not wanted.  Assuming that the userspace could control
every access to device makes no sense.

For your case, there is no garantee userspace could block every access
to "other PF" initiated by "other PF" driver.  There is also no
notification to "other PF" driver that userspace is doing reset to
"other PF" via "management PF" interface.  "other PF" driver just break
on reset.

> 
> > 
> > > image. I don't think the driver performing the port_reset() can know all the
> > 
> > Other PF drivers should know their own components. They should be aware
> > that their devices are being reset.
> 
> The other PF drivers depend on the actual FPGA image being run.
> 
> > 
> > > components to be able to provide any meaningful management.
> > 
> > If the reset provider and reset consumer are not in the same driver,
> > they should interact with each other. IIRC, some reset controller class
> > works for this purpose.
> 
> The other PFs in many cases can present as standard devices with existing
> drivers like virtio-net or virtio-blk. It does not seem desireable to have
> to change existing drivers for a particular FPGA implementation

If you have to use a specific method for reset, it is not a standard virtio
pci device, and you have to make some change.

Thanks,
Yilun

> 
> Thanks,
> Matthew
> > 
> > Thanks,
> > Yilun
> > 
> > > 
> > > Thanks,
> > > Matthew
> > > 
> > > > 
> > > > Thanks,
> > > > Yilun
> > > > 
> > > > > 
> > > > > Do you want me to update the commit message with this information?
> > > > > 
> > > > > Thanks,
> > > > > Matthew
> > > > 
> > > > 
> > 
> > 

  reply	other threads:[~2024-02-18  3:27 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-01-25 23:37 Matthew Gerlach
2024-01-30  9:55 ` Xu Yilun
2024-01-30 18:00   ` matthew.gerlach
2024-01-31  5:43     ` Xu Yilun
2024-02-01  0:26       ` matthew.gerlach
2024-02-05  2:31         ` Xu Yilun
2024-02-07 16:40           ` matthew.gerlach
2024-02-18  3:23             ` Xu Yilun [this message]
2024-02-21  1:49               ` matthew.gerlach
2024-02-21 16:14                 ` Xu Yilun
2024-03-01 20:39                   ` matthew.gerlach
2024-03-02 11:39                     ` Xu Yilun

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=ZdF4JvYQQL8irnbW@yilunxu-OptiPlex-7050 \
    --to=yilun.xu@linux.intel.com \
    --cc=hao.wu@intel.com \
    --cc=linux-fpga@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=matthew.gerlach@linux.intel.com \
    --cc=mdf@kernel.org \
    --cc=trix@redhat.com \
    --cc=yilun.xu@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®