All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
To: Xenbegn developer <xen.begn.dev@gmail.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
	xen-devel@lists.xen.org, ian.campbell@citrix.com
Subject: Re: [Query] Flow of PCI device dedicated to a domU
Date: Tue, 22 Jul 2014 15:11:47 +0100	[thread overview]
Message-ID: <alpine.DEB.2.02.1407221453580.2295@kaball.uk.xensource.com> (raw)
In-Reply-To: <CABJY2XCugrFfMPOyg69DQy+B456ZdxH_6VsQ=iCU0GMXs+G+XQ@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 5077 bytes --]

Please don't use HTML emails and please don't top post.

On Tue, 22 Jul 2014, Xenbegn developer wrote:
> Ian Can you please help in this. I am trying to understand how things are done in x86 xen. Based on that will
> implement in ARM PCI passthrough

The basic mechanism is that Xen assigns the PCI root complex/host
bridge to Dom0. Dom0 walks the bus and finds out the devices available.

When the user assigns a PCI device to a VM, the toolstack (xl/libxl)
issues hypercalls to remap interrupts and MMIO regions of that device
into the guest VM.
The device is added to the guest virtual PCI bus that is created by the
xen-pcifront driver at boot. PCI config space reads/writes go through
xen-pcifront that talks to xen-pciback in Dom0.

PCI bus enumeration is done by Dom0 at boot time. Dom0 issues hypercalls
to Xen to tell the hypervisor what devices are available. It would be
conceivable to do the enumeration directly in Xen if Xen had the
appropriate driver for the host bridge. It might be even better.

The main interaction between Xen and the config space of PCI devices is
about MSI programming. Xen programs MSIs directly because it is Xen that
is going to receive them and then inject them into guests.


If I were you I would base my work on Julien SMMU series and I would
ignore MSIs for now. I would try to get pcifront and pciback running and
then assign a PCI device to a guest, only using legacy interrupts.

After that you could try to add support for doing PCI config space reads
and writes in Xen. Then introduce MSI support but, as Ian wrote, you
would need to rebase your work on the GICv3 series. I don't think you
actually need full ITS support to be able to get MSI running though.
You might already have everything you need in terms of patches, but they
are still not applied to xen-unstable yet.



 
> On Tue, Jul 22, 2014 at 4:21 PM, Xenbegn developer <xen.begn.dev@gmail.com> wrote:
> 
> 
> 
>       On Tue, Jul 22, 2014 at 4:03 PM, Andrew Cooper <andrew.cooper3@citrix.com> wrote:
>             On 22/07/14 11:13, Xenbegn developer wrote:
> 
> 
> 
>       On Tue, Jul 22, 2014 at 3:26 PM, Andrew Cooper <andrew.cooper3@citrix.com> wrote:
>             On 22/07/14 10:50, Xenbegn developer wrote:
> 
> 
> 
>       On Wed, Jul 16, 2014 at 3:20 PM, Andrew Cooper <andrew.cooper3@citrix.com> wrote:
>             On 16/07/14 07:12, Xenbegn developer wrote:
>       Hi,
> I am trying to understand the flow of how a PCI device driver in domU works
> after a PCI device is is assigned to a domU.
> 
> a) If a PCI device is assigned to a domU, this device has to be on a PCI
> bus. So as per my view xen would have to somehow provide a PCI Controller
> on which this device is attached.
> => Is my assumption correct ? If yes how it is done, No then also How
> enumeration of this device happens in domU kernel
> 
> 
> No.
> 
> PV guests have no PCI root ports/bridges; they use devices as single entities
> knowing that Xen/dom0 takes care of the other bits. HVM guests have their PCI
> devices attached to the virtual southbridge which is all emulated by Qemu.
> 
> 
> b) Is the Configuration space of the PCI device directly accessible to the
> domU (assuming the kernel accesses it using memory map) ? If not then it is
> trapped by xen
> 
> 
> All configuration space is trap+emulate in Xen, although almost all operations
> permitted.
> 
> 
> c) Who assigns the MSI (addr + value) in the PCI device. If Xen then how
> Xen does a translation from Physical MSI to guest MSI (where in code)
> 
> 
> Xen controls all interrupts on the system, which is why it needs to trap all
> config accesses to notice when a domain is attempting to change the interrupt
> information.  In that case, Xen fixes up its delivery of interrupts to the guest,
> but leaves the underlying interrupt information intact.
> 
> ~Andrew
> 
> 
> Linux kernel pci code has a function called __write_msi_msg. This method writes to
> config space for MSI/MSIX
> pci_write_config_dword(dev, pos + PCI_MSI_ADDRESS_LO,
>                        msg->address_lo);
> 
> Now as per (b) and (c) it has to be trapped in xen. But in x86/traps.c (guest_io_write)
> I dont see any MSI handling.
> Can you please explain (point to the code) where domain is attempting to change the
> interrupt information.
>    
> 
> 
> PV guests are expected to use PHYSOP hypercalls for interrupt management.  Xen does not
> provide transparent emulation support for them.
> 
> HVM guests do get transparent emulation support, as from the point of view of an HVM guest,
> they are talking to a real PCI device.
> 
> Can you please point to a device driver code which is calling PHYSOP calls for setting an MSI Addr
> + MSI number
> 
> 
> No.  Partly because I don't know exactly, and mainly because this is something you should trivially be
> able to search for.
> 
> It is not that trivial. Can anoyone from Citrix reply ?
>       ~Andrew
> 
> 
> 
> 
> 

[-- Attachment #2: Type: text/plain, Size: 126 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel

  parent reply	other threads:[~2014-07-22 14:11 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-07-16  6:12 [Query] Flow of PCI device dedicated to a domU Xenbegn developer
2014-07-16  9:50 ` Andrew Cooper
2014-07-17  6:34   ` Xenbegn developer
2014-07-17  9:42     ` Andrew Cooper
2014-07-22  9:43       ` Xenbegn developer
2014-07-22  9:53         ` Andrew Cooper
2014-07-22 10:02           ` Xenbegn developer
2014-07-22  9:50   ` Xenbegn developer
2014-07-22  9:56     ` Andrew Cooper
2014-07-22 10:13       ` Xenbegn developer
2014-07-22 10:33         ` Andrew Cooper
2014-07-22 10:51           ` Xenbegn developer
2014-07-22 11:33             ` Xenbegn developer
2014-07-22 12:44               ` Ian Campbell
2014-07-22 14:11               ` Stefano Stabellini [this message]
2014-07-22 15:56                 ` Simon Martin
2014-07-22 16:01                   ` Simon Martin
2014-07-22 16:02                   ` Ian Campbell
2014-07-22 16:06                     ` Simon Martin
2014-07-22 16:06                   ` Stefano Stabellini
2014-07-22 16:09                     ` Simon Martin
2014-07-24  5:17                 ` Xenbegn developer
2014-07-24 10:04                   ` Stefano Stabellini
2014-07-24  8:08     ` Xenbegn developer
2014-07-24  9:20       ` Ian Campbell
2014-07-24 10:21       ` Stefano Stabellini
2014-07-16 13:46 ` Konrad Rzeszutek Wilk

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=alpine.DEB.2.02.1407221453580.2295@kaball.uk.xensource.com \
    --to=stefano.stabellini@eu.citrix.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=ian.campbell@citrix.com \
    --cc=xen-devel@lists.xen.org \
    --cc=xen.begn.dev@gmail.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.