public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
From: Jan Kiszka <jan.kiszka@web.de>
To: "Michael S. Tsirkin" <mst@redhat.com>
Cc: Avi Kivity <avi@redhat.com>,
	Marcelo Tosatti <mtosatti@redhat.com>,
	kvm@vger.kernel.org, Alex Williamson <alex.williamson@redhat.com>
Subject: Re: [PATCH 12/13] pci-assign: Generic config space access management
Date: Tue, 28 Jun 2011 11:20:06 +0200	[thread overview]
Message-ID: <4E099CC6.8010506@web.de> (raw)
In-Reply-To: <20110628083017.GK10881@redhat.com>

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

On 2011-06-28 10:30, Michael S. Tsirkin wrote:
> On Tue, Jun 28, 2011 at 10:18:20AM +0200, Jan Kiszka wrote:
>>> Is this an optimization? What harm does it do to virtualize always?
>>
>> Just replicating the old behavior,
> 
> Oh, I absolutely agree with that.
> It's better to do more cleanups in separate patches,
> this one is huge so it's better if bisect can lead us to
> a specific change.
> 
>> but I can virtualize it unconditionally.
> 
> 
> Just pointing out follow-up
> cleanups that become possible.
> 
>>>
>>>>  
>>>>      return 0;
>>>> @@ -1694,6 +1571,26 @@ static int assigned_initfn(struct PCIDevice *pci_dev)
>>>>          return -1;
>>>>      }
>>>>  
>>>> +    /*
>>>> +     * Set up basic config space access control. Will be further refined during
>>>> +     * device initialization.
>>>> +     *
>>>> +     * Direct read/write access is grangted for:
>>>
>>> typo
>>>
>>>> +     *  - status & command registers, revision ID & class code, cacheline size,
>>>> +     *    latency timer, header type, BIST
>>>> +     *  - cardbus CIS pointer, subsystem vendor & ID
>>>> +     *  - reserved fields
>>>> +     *  - Min_Gnt & Max_Lat
>>>> +     */
>>>> +    memset(dev->direct_config_read + PCI_COMMAND, 0xff, 12);
>>>> +    memset(dev->direct_config_read + PCI_CARDBUS_CIS, 0xff, 8);
>>>> +    memset(dev->direct_config_read + PCI_CAPABILITY_LIST + 1, 0xff, 7);
>>>> +    memset(dev->direct_config_read + PCI_MIN_GNT, 0xff, 2);
>>>> +    memset(dev->direct_config_write + PCI_COMMAND, 0xff, 12);
>>>> +    memset(dev->direct_config_write + PCI_CARDBUS_CIS, 0xff, 8);
>>>> +    memset(dev->direct_config_write + PCI_CAPABILITY_LIST + 1, 0xff, 7);
>>>> +    memset(dev->direct_config_write + PCI_MIN_GNT, 0xff, 2);
>>>> +
>>>>      if (get_real_device(dev, dev->host.seg, dev->host.bus,
>>>>                          dev->host.dev, dev->host.func)) {
>>>>          error_report("pci-assign: Error: Couldn't get real device (%s)!",
>>>> diff --git a/hw/device-assignment.h b/hw/device-assignment.h
>>>> index 3d20207..ed5defb 100644
>>>> --- a/hw/device-assignment.h
>>>> +++ b/hw/device-assignment.h
>>>> @@ -104,12 +104,13 @@ typedef struct AssignedDevice {
>>>>  #define ASSIGNED_DEVICE_MSIX_MASKED (1 << 2)
>>>>          uint32_t state;
>>>>      } cap;
>>>> +    uint8_t direct_config_read[PCI_CONFIG_SPACE_SIZE];
>>>> +    uint8_t direct_config_write[PCI_CONFIG_SPACE_SIZE];
>>>
>>> What direct means isn't obvious. Add a comment?
>>
>> Ok.
>>
>>>
>>> We could revert the logic, have bits for
>>> emulate_config_read/emulate_config_write.  I think that most of the
>>> registers can safely be read/written directly, so protecting relevant
>>> bits will be less work. Is that true?
>>
>> I intentionally chose whitelisting to avoid accidentally granting access
>> to forgotten fields. I don't think it's a good idea to switch to
>> blacklisting.
>>
>> Jan
>>
> 
> At least in theory iommu protects us from most harm device can do
> (besides downstream transactions, which is why we must protect the BAR).
> Even if we change things, it probably should be a separate patch since
> whitelisting is what existing code had.
> However, I think emulate_xx is just a better name for the field.
> You can preset them to all ones if you think it's safer.

OK, that sounds reasonable.

Jan


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 259 bytes --]

  reply	other threads:[~2011-06-28  9:20 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-06-27 18:19 [PATCH 00/13] qemu-kvm: device assignment cleanups and upstream diff reductions Jan Kiszka
2011-06-27 18:19 ` [PATCH 01/13] qemu-kvm: Reduce configure and Makefile.target diff to upstream Jan Kiszka
2011-06-27 18:19 ` [PATCH 02/13] qemu-kvm: Drop some no longer needed #ifdefs Jan Kiszka
2011-06-27 18:19 ` [PATCH 03/13] qemu-kvm: Drop -enable-nesting command line switch Jan Kiszka
2011-06-28 10:48   ` Roedel, Joerg
2011-06-28 10:52     ` Jan Kiszka
2011-06-28 11:45       ` Avi Kivity
2011-06-27 18:19 ` [PATCH 04/13] qemu-kvm: Remove eventfd compat header Jan Kiszka
2011-06-28 11:09   ` Michael S. Tsirkin
2011-06-28 11:11     ` Jan Kiszka
2011-06-28 12:07       ` Michael S. Tsirkin
2011-06-28 12:11         ` Jan Kiszka
2011-06-28 12:17           ` Michael S. Tsirkin
2011-06-28 12:40             ` Jan Kiszka
2011-07-03  9:46     ` Bernhard Held
2011-07-03  9:54       ` Michael S. Tsirkin
2011-07-03  9:57         ` Michael S. Tsirkin
2011-07-03 18:31           ` Bernhard Held
2011-07-04 10:37             ` Michael S. Tsirkin
2011-07-04 12:13               ` Bernhard Held
2011-07-04 13:34                 ` Michael S. Tsirkin
2011-06-27 18:19 ` [PATCH 05/13] qemu-kvm: Remove qemu_ram_unmap Jan Kiszka
2011-06-27 18:19 ` [PATCH 06/13] qemu-kvm: Drop or replace useless device-assignment.h inclusions Jan Kiszka
2011-06-27 18:19 ` [PATCH 07/13] pci-assign: Fix kvm_deassign_irq handling in assign_irq Jan Kiszka
2011-06-27 18:19 ` [PATCH 08/13] pci-assign: Update legacy interrupts only if used Jan Kiszka
2011-06-27 18:19 ` [PATCH 09/13] pci-assign: Drop libpci header dependency Jan Kiszka
2011-06-28  8:54   ` Michael S. Tsirkin
2011-06-27 18:19 ` [PATCH 10/13] pci-assign: Refactor calc_assigned_dev_id Jan Kiszka
2011-06-27 18:19 ` [PATCH 11/13] pci-assign: Track MSI/MSI-X capability position, clean up related code Jan Kiszka
2011-06-27 18:19 ` [PATCH 12/13] pci-assign: Generic config space access management Jan Kiszka
2011-06-27 20:54   ` Michael S. Tsirkin
2011-06-27 22:48   ` Alex Williamson
2011-06-28  7:08     ` Jan Kiszka
2011-06-28  8:07     ` Avi Kivity
2011-06-28  8:19       ` Jan Kiszka
2011-06-28  8:21         ` Avi Kivity
2011-06-28  8:10   ` Michael S. Tsirkin
2011-06-28  8:18     ` Jan Kiszka
2011-06-28  8:30       ` Michael S. Tsirkin
2011-06-28  9:20         ` Jan Kiszka [this message]
2011-06-28  8:51   ` Michael S. Tsirkin
2011-06-28  9:10     ` Avi Kivity
2011-06-27 18:19 ` [PATCH 13/13] qemu-kvm: Resolve PCI upstream diffs Jan Kiszka
2011-06-28  8:58   ` Michael S. Tsirkin
2011-06-28  9:12     ` Jan Kiszka
2011-06-28  9:22       ` Michael S. Tsirkin
2011-06-28  8:10 ` [PATCH 00/13] qemu-kvm: device assignment cleanups and upstream diff reductions Avi Kivity
2011-06-28  8:57   ` Michael S. Tsirkin

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=4E099CC6.8010506@web.de \
    --to=jan.kiszka@web.de \
    --cc=alex.williamson@redhat.com \
    --cc=avi@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=mst@redhat.com \
    --cc=mtosatti@redhat.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