public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
From: Anthony Liguori <anthony@codemonkey.ws>
To: Avi Kivity <avi@qumranet.com>
Cc: kvm-devel@lists.sourceforge.net, allen.m.kay@intel.com,
	andrea@qumranet.com, benami@il.ibm.com
Subject: Re: [PATCH 1/1] direct mmio for passthrough - kernel part
Date: Tue, 01 Apr 2008 13:21:37 -0500	[thread overview]
Message-ID: <47F27D31.5050604@codemonkey.ws> (raw)
In-Reply-To: <47F26AD2.8000406@qumranet.com>

Avi Kivity wrote:
> Anthony Liguori wrote:
>> Avi Kivity wrote:
>>> benami@il.ibm.com wrote:
>>>  
>>>> From: Ben-Ami Yassour <benami@il.ibm.com>
>>>>
>>>> Enable a guest to access a device's memory mapped I/O regions 
>>>> directly.
>>>> Userspace sends the mmio regions that the guest can access. On the 
>>>> first
>>>> page fault for an access to an mmio address the host translates the 
>>>> gva to hpa,
>>>> and updates the sptes.
>>>>
>>>>       
>>>
>>> Can you explain why you're not using the regular memory slot 
>>> mechanism? i.e. have userspace mmap(/dev/mem) and create a memslot 
>>> containing that at the appropriate guest physical address?
>>>   
>>
>> /dev/mem is often restricted in what memory can be mapped.  
>
> Please elaborate.

http://lkml.org/lkml/2008/1/30/473

Ubuntu now carries this and I think Fedora has carried something like 
this for a long time.

It's okay for us because we just need device memory access but who knows 
if it will be restricted more in the future.  If X ever gets their act 
together and gets proper kernel drivers, I think there would be a strong 
case for removing /dev/mem altogether.

>> However, we can't add something like this to KVM that allows 
>> arbitrary HPA's to be mapped into a guest from userspace.  This is 
>> just as bad as /dev/mem and is going to upset a lot of people.
>
> Device assignment is as rootish as you get.

In an SELinux world, root may still have limited access to the system.  
In an ideal world, we would be able to guarantee that at worst, a guest 
can only harm the device it has access to and nothing else on the 
system.  This probably requires MSI and VT-d.  Even then, you may be 
able to physically damage the system by improperly programming the device.

>>
>>
>> Regardless of whether we can use /dev/mem, I think we should 
>> introduce a new char device anyway.  We only need to mmap() MMIO 
>> regions which are mapped by the PCI bus, presumably, the kernel 
>> should know about these mappings.  The driver should only allow 
>> mappings that are valid for a particular PCI device such that it 
>> cannot be abused to map arbitrary regions of memory into a guest.  
>> Bonus points if it can validate that there isn't a valid Linux driver 
>> loaded for the given PCI device.
>
> This is a very good idea.
>
> The interface exposed would be the same as /dev/mem, so any kvm 
> modifications to get /dev/mem working would be applicable to 
> /dev/pci/*, no?

I looked at Andrea's patches and I didn't see any special handling for 
non-RAM pages.  Something Muli mentioned that kept them from doing 
/sys/devices/pci/.../region to begin with was the fact that IO pages do 
not have a struct page backing them so get_user_pages() will fail in 
gfn_to_page().

It's not too hard to modify the code to also try get_user_pages() to 
look up the VMA instead of the struct page.  From the VMA, you can get 
the HPA for an IO mapping.  The problem though is that gfn_to_page() 
wants to return a page, not a HPA.  I haven't looked too deeply yet, but 
my suspicion is that to properly support mapping in VM_IO pages will 
require some general refactoring since we always assume that a struct 
page exists for any HPA.

Regards,

Anthony Liguori


-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace

  parent reply	other threads:[~2008-04-01 18:21 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-04-01 11:52 [RFC] direct mmio for passthrough benami
2008-04-01 11:52 ` [PATCH 1/1] direct mmio for passthrough - kernel part benami
2008-04-01 13:30   ` Avi Kivity
2008-04-01 14:42     ` Anthony Liguori
2008-04-01 15:20       ` Anthony Liguori
2008-04-01 17:05         ` Avi Kivity
2008-04-01 18:18         ` Andrea Arcangeli
2008-04-01 18:28           ` Anthony Liguori
2008-04-01 17:03       ` Avi Kivity
2008-04-01 17:18         ` Daniel P. Berrange
2008-04-01 18:10           ` Andrea Arcangeli
2008-04-01 18:18             ` Daniel P. Berrange
2008-04-01 18:23             ` Anthony Liguori
2008-04-01 18:21         ` Anthony Liguori [this message]
2008-04-01 19:22           ` Avi Kivity
2008-04-01 22:38             ` Andrea Arcangeli
2008-04-01 22:22           ` Andrea Arcangeli
2008-04-01 22:29             ` Anthony Liguori
2008-04-02  4:00               ` Avi Kivity
2008-04-01 19:28     ` Ben-Ami Yassour1
2008-04-01 19:43       ` Avi Kivity
2008-04-01 20:04         ` Anthony Liguori
2008-04-02  4:32           ` Avi Kivity
2008-04-02  7:03             ` Andrea Arcangeli
2008-04-02  9:50               ` Avi Kivity
2008-04-02 10:28                 ` Andrea Arcangeli
2008-04-02 10:59                   ` Avi Kivity
2008-04-02 11:16                     ` Avi Kivity
2008-04-02 11:50                       ` Andrea Arcangeli
2008-04-02 11:53                         ` Andrea Arcangeli
2008-04-03  8:51                         ` Avi Kivity
2008-04-02 14:59                     ` Anthony Liguori

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=47F27D31.5050604@codemonkey.ws \
    --to=anthony@codemonkey.ws \
    --cc=allen.m.kay@intel.com \
    --cc=andrea@qumranet.com \
    --cc=avi@qumranet.com \
    --cc=benami@il.ibm.com \
    --cc=kvm-devel@lists.sourceforge.net \
    /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