xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
From: Julien Grall <julien.grall@arm.com>
To: Roger Pau Monne <roger.pau@citrix.com>
Cc: Stefano Stabellini <sstabellini@kernel.org>,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	Jan Beulich <jbeulich@suse.com>,
	xen-devel@lists.xenproject.org, boris.ostrovsky@oracle.com,
	nd@arm.com
Subject: Re: [PATCH v2 3/9] xen/mm: move modify_identity_mmio to global file and drop __init
Date: Tue, 25 Apr 2017 10:09:34 +0100	[thread overview]
Message-ID: <14e43c58-48fe-758e-b869-e1a9badfbac1@arm.com> (raw)
In-Reply-To: <20170425080110.pf7x6xx3dbtfvpnf@dhcp-3-128.uk.xensource.com>

Hi Roger,

On 25/04/2017 09:01, Roger Pau Monne wrote:
> On Mon, Apr 24, 2017 at 03:42:08PM +0100, Julien Grall wrote:
>> On 20/04/17 16:17, Roger Pau Monne wrote:
>>>  /* Populate a HVM memory range using the biggest possible order. */
>>> diff --git a/xen/common/memory.c b/xen/common/memory.c
>>> index 52879e7438..0d970482cb 100644
>>> --- a/xen/common/memory.c
>>> +++ b/xen/common/memory.c
>>> @@ -1438,6 +1438,40 @@ int prepare_ring_for_helper(
>>>      return 0;
>>>  }
>>>
>>> +int modify_mmio(struct domain *d, unsigned long gfn, unsigned long pfn,
>>
>> Whilst you introduce this new function, please use mfn_t and gfn_t.
>>
>> Also s/pfn/mfn/
>
> Done.
>
>>> +                unsigned long nr_pages, const bool map)
>>> +{
>>> +    int rc;
>>> +
>>> +    /*
>>> +     * Make sure this function is only used by the hardware domain, because it
>>> +     * can take an arbitrary long time, and could DoS the whole system.
>>> +     */
>>> +    ASSERT(is_hardware_domain(d));
>>
>> What would be the plan for guest if we decide to use vpci?
>
> One option would be to not allow the DomU to relocate it's BARs and ignore
> writes to the 2nd bit of the command register (PCI_COMMAND_MEMORY), thus always
> having the BARs mapped. The other is to somehow allow VMExit (and the ARM
> equivalent) continuation (something similar to what we do with hypercalls).

My understanding is BARs may be allocated by the kernel because the 
firmware didn't do it. This is the current case on ARM (and I guess x86) 
where Linux will always go through the BARs.

So if you do the first option, who would decide the position of the BARs?

For the second option, we can take advantage of superpage (4K, 2M, 1G) 
mapping on ARM, so the number of actual mapping would be really limited.

Also, we are looking at MMIO continuation for ARM for other part of the 
hypervisor. We might be able to leverage that for this function.

>
>>> +
>>> +    for ( ; ; )
>>> +    {
>>> +        rc = (map ? map_mmio_regions : unmap_mmio_regions)
>>
>> On ARM, map_mmio_regions and unmap_mmio_regions will map the MMIO with very
>> strict attribute. I think we would need an extra argument to know the wanted
>> memory attribute (maybe p2m_type_t?).
>
> I'm not sure I can do anything regarding this ATM. Sorry for my ignorance, but
> map_mmio_regions on ARM maps the region as p2m_mmio_direct_dev, and according
> to the comment that's "Read/write mapping of genuine Device MMIO area", which
> fits exactly into my usage (I'm using it to map BARs).

We have few p2m_mmio_direct_* p2m_type because the architecture allows 
us to have fine grain memory attribute.

The p2m type p2m_mmio_direct_dev is very restrictive (unaligned access 
forbid, non-cacheable, non-gatherable). This should be used for MMIO 
region that have side-effects and will affect performances.

We use this one by default as it will restrict the memory attribute used 
by the guest. However, this will be an issue for at least cacheable 
BARs. We had similar issue recently on ARM with SRAM device as driver 
may do unaligned access and cacheable one.

For DOM0 we are using p2m_mmio_direct_c and rely on the OS to restrict 
the memory attribute when necessary. We cannot do that for guest as this 
may have some security implications.

So for the guest we will do on the case by case basis. For instance we 
you map BAR, you know the kind and can decide of a proper memory attribute.

Cheers,

-- 
Julien Grall

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

  reply	other threads:[~2017-04-25  9:09 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-04-20 15:17 [PATCH v2 0/9] vpci: PCI config space emulation Roger Pau Monne
2017-04-20 15:17 ` [PATCH v2 1/9] xen/vpci: introduce basic handlers to trap accesses to the PCI config space Roger Pau Monne
2017-04-21 16:07   ` Paul Durrant
2017-04-24  9:09     ` Roger Pau Monne
2017-04-24  9:34       ` Paul Durrant
2017-04-24 10:08         ` Roger Pau Monne
2017-04-24 10:19           ` Paul Durrant
2017-04-24 11:02             ` Roger Pau Monne
2017-04-24 11:50               ` Paul Durrant
2017-04-25  8:27                 ` Roger Pau Monne
2017-04-25  8:35                   ` Paul Durrant
2017-04-21 16:23   ` Paul Durrant
2017-04-24  9:42     ` Roger Pau Monne
2017-04-24  9:55       ` Paul Durrant
2017-04-24  9:58       ` Paul Durrant
2017-04-24 10:11         ` Roger Pau Monne
2017-04-24 10:12           ` Paul Durrant
2017-04-20 15:17 ` [PATCH v2 2/9] x86/ecam: add handlers for the PVH Dom0 MMCFG areas Roger Pau Monne
2017-04-20 15:17 ` [PATCH v2 3/9] xen/mm: move modify_identity_mmio to global file and drop __init Roger Pau Monne
2017-04-24 14:42   ` Julien Grall
2017-04-25  8:01     ` Roger Pau Monne
2017-04-25  9:09       ` Julien Grall [this message]
2017-04-25  9:25         ` Roger Pau Monne
2017-04-25  9:32           ` Jan Beulich
2017-04-26  8:26             ` Roger Pau Monne
2017-04-26  8:51               ` Jan Beulich
2017-04-27  8:58             ` Roger Pau Monne
2017-04-27  9:08               ` Julien Grall
2017-04-27  9:29               ` Jan Beulich
2017-04-20 15:17 ` [PATCH v2 4/9] xen/pci: split code to size BARs from pci_add_device Roger Pau Monne
2017-04-20 15:17 ` [PATCH v2 5/9] xen/vpci: add handlers to map the BARs Roger Pau Monne
2017-04-20 15:17 ` [PATCH v2 6/9] xen/vpci: trap access to the list of PCI capabilities Roger Pau Monne
2017-04-20 15:17 ` [PATCH v2 7/9] vpci: add a priority field to the vPCI register initializer Roger Pau Monne
2017-04-20 15:17 ` [PATCH v2 8/9] vpci/msi: add MSI handlers Roger Pau Monne
2017-04-21  8:38   ` Roger Pau Monne
2017-04-24 15:31   ` Julien Grall
2017-04-25 11:49     ` Roger Pau Monne
2017-04-25 12:00       ` Julien Grall
2017-04-25 13:19         ` Roger Pau Monne
2017-04-20 15:17 ` [PATCH v2 9/9] vpci/msix: add MSI-X handlers Roger Pau Monne

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=14e43c58-48fe-758e-b869-e1a9badfbac1@arm.com \
    --to=julien.grall@arm.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=boris.ostrovsky@oracle.com \
    --cc=jbeulich@suse.com \
    --cc=nd@arm.com \
    --cc=roger.pau@citrix.com \
    --cc=sstabellini@kernel.org \
    --cc=xen-devel@lists.xenproject.org \
    /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;
as well as URLs for NNTP newsgroup(s).