From: "Michael S. Tsirkin" <mst@redhat.com>
To: Jan Kiszka <jan.kiszka@web.de>
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:30:17 +0300 [thread overview]
Message-ID: <20110628083017.GK10881@redhat.com> (raw)
In-Reply-To: <4E098E4C.9080901@web.de>
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.
--
MST
next prev parent reply other threads:[~2011-06-28 8:29 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 [this message]
2011-06-28 9:20 ` Jan Kiszka
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=20110628083017.GK10881@redhat.com \
--to=mst@redhat.com \
--cc=alex.williamson@redhat.com \
--cc=avi@redhat.com \
--cc=jan.kiszka@web.de \
--cc=kvm@vger.kernel.org \
--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