Re: [PATCH v3] PCI: Add pci_enable_atomic_request

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Mar 28, 2016 at 03:10:01PM -0500, Jay Cornwall wrote:
> On 2015-12-07 10:23, Bjorn Helgaas wrote:
> >On Fri, Dec 04, 2015 at 01:33:30PM -0600, Jay Cornwall wrote:
> >>On 2015-12-04 12:25, Bjorn Helgaas wrote:
> >>>On Thu, Sep 24, 2015 at 10:59:50AM -0500, Jay Cornwall wrote:
> >>>>The PCIe 3.0 AtomicOp (6.15) feature allows atomic transctions
> >>>>to be requested
> >>>>by, routed through and completed by PCIe components. Routing and
> >>>>completion
> >>>>do not require software support. Component support for each is
> >>>>detectable via
> >>>>the DEVCAP2 register.
> >>>>
> >>>>AtomicOp requests are permitted only if a component's
> >>>>DEVCTL2.ATOMICOP_REQUESTER_ENABLE field is set. This capability
> >>>>cannot be
> >>>>detected but is a no-op if set on a component with no support.
> >>>>These requests
> >>>>can only be serviced if the upstream components support AtomicOp
> >>>>completion
> >>>>and/or routing to a component which does.
> >>>>
> >>>>A concrete example is the AMD Fiji-class GPU, which is specified
> >>>>to support
> >>>>AtomicOp requests, routed through a PLX 8747 switch (advertising
> >>>>AtomicOp
> >>>>routing) to a Haswell host bridge (advertising AtomicOp
> >>>>completion support).
> >>>>When AtomicOp requests are disabled the GPU logs attempts to
> >>>>initiate requests
> >>>>to an MMIO register for debugging.
> >>>>
> >>>>Add pci_enable_atomic_request for per-device control over
> >>>>AtomicOp requests.
> >>>>Upstream bridges are checked for AtomicOp routing capability and
> >>>>the call
> >>>>fails if any lack this capability. The root port is checked for
> >>>>AtomicOp
> >>>>completion capabilities and the call fails if it does not support any.
> >>>>Routes to other PCIe components are not checked for AtomicOp
> >>>>routing and
> >>>>completion capabilities.
> >>>>
> >>>>v2: Check for AtomicOp route to root port with AtomicOp completion
> >>>>v3: Style fixes
> >>>>
> >>>>Signed-off-by: Jay Cornwall <jay@xxxxxxxxxxxx>
> >>>
> >>>Hi Jay,
> >>>
> >>>Is there a user for this new functionality?  I don't like to add things
> >>>that have no apparent user.
> >>>
> >>>Bjorn
> >>
> >>The client for this code is scheduled to be upstreamed in
> >>drm/amdgpu, but we have some internal restructuring to complete
> >>before a patchset will be available.
> >>
> >>If you'd prefer, I can resubmit this patch as part of that series
> >>when it is ready.
> >
> >Yeah, that'd be great, why don't we do that.  Thanks!
> >
> >Bjorn
> 
> We've been testing this prior to upstreaming the client code and ran
> into a problem. When the client driver (amdgpu) is running within a
> virtual machine on the physical PCI function (not SR-IOV) the
> hypervisor virtualizes the PCI configuration space and blocks writes
> to DEVCTL2.ATOMICOP_REQUESTER_ENABLE.
> 
> I think the host is intended to manage the PCI configuration space
> in this model. The client driver cannot run simultaneously on the
> host and guest. This appears to leave the PCI subsystem as the
> remaining opportunity to enable this feature.
> 
> Would you object to calling pci_enable_atomic_request
> unconditionally in pci_init_capabilites? On most PCIe devices this
> should be a no-op but I don't see a way to check for this in the
> AtomicOp specification.

The spec says "discovery of AtomicOp Requester capabilities is outside
the scope of this specification" [PCIe r3.0, sec 6.15], so I think the
intent is that a driver knows the capability of the device and enables
and uses AtomicOps when appropriate.  

Once enabled in Device Control 2, a device's use of AtomicOps is
competely device-specific.  In many cases, the device probably doesn't
support AtomicOps, so enabling them would be a no-op.  But there could
be devices where AtomicOps are nominally supported but untested or
broken.  Even if we didn't change their drivers, those devices could
start using AtomicOps, so I'm not comfortable with the PCI core
enabling AtomicOp requests indiscriminately.

I don't know anything about the interface between the hypervisor and
the client driver.  Is there any opportunity for an ioctl or sysfs
file or anything whereby the client could ask the hypervisor to enable
AtomicOps?

Bjorn
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux