From: Avi Kivity <avi@redhat.com>
To: Sheng Yang <sheng@linux.intel.com>
Cc: Marcelo Tosatti <mtosatti@redhat.com>,
"Michael S. Tsirkin" <mst@redhat.com>,
kvm@vger.kernel.org
Subject: Re: [PATCH 2/3] KVM: Emulate MSI-X table in kernel
Date: Mon, 31 Jan 2011 15:09:09 +0200 [thread overview]
Message-ID: <4D46B475.7010209@redhat.com> (raw)
In-Reply-To: <20110130043821.GA1812@syang10-desktop>
On 01/30/2011 06:38 AM, Sheng Yang wrote:
> (Sorry, missed this mail...)
>
> On Mon, Jan 17, 2011 at 02:29:44PM +0200, Avi Kivity wrote:
> > On 01/06/2011 12:19 PM, Sheng Yang wrote:
> > >Then we can support mask bit operation of assigned devices now.
> > >
> > >
> > >
> > >+int kvm_assigned_device_update_msix_mask_bit(struct kvm *kvm,
> > >+ int assigned_dev_id, int entry, bool mask)
> > >+{
> > >+ int r = -EFAULT;
> > >+ struct kvm_assigned_dev_kernel *adev;
> > >+ int i;
> > >+
> > >+ if (!irqchip_in_kernel(kvm))
> > >+ return r;
> > >+
> > >+ mutex_lock(&kvm->lock);
> > >+ adev = kvm_find_assigned_dev(&kvm->arch.assigned_dev_head,
> > >+ assigned_dev_id);
> > >+ if (!adev)
> > >+ goto out;
> > >+
> > >+ for (i = 0; i< adev->entries_nr; i++)
> > >+ if (adev->host_msix_entries[i].entry == entry) {
> > >+ if (mask)
> > >+ disable_irq_nosync(
> > >+ adev->host_msix_entries[i].vector);
> >
> > Is it okay to call disable_irq_nosync() here? IIRC we don't check
> > the mask bit on irq delivery, so we may forward an interrupt to the
> > guest after the mask bit was set.
> >
> > What does pci say about the mask bit? when does it take effect?
> >
> > Another question is whether disable_irq_nosync() actually programs
> > the device mask bit, or not. If it does, then it's slow, and it may
> > be better to leave interrupts enabled but have an internal pending
> > bit. If it doesn't program the mask bit, it's fine.
>
> I think Michael and Jan had explained this.
> >
> > >+ else
> > >+ enable_irq(adev->host_msix_entries[i].vector);
> > >+ r = 0;
> > >+ break;
> > >+ }
> > >+out:
> > >+ mutex_unlock(&kvm->lock);
> > >+ return r;
> > >+}
> > >
> > >+
> > >+static int msix_table_mmio_read(struct kvm_io_device *this, gpa_t addr, int len,
> > >+ void *val)
> > >+{
> > >+ struct kvm_msix_mmio_dev *mmio_dev =
> > >+ container_of(this, struct kvm_msix_mmio_dev, table_dev);
> > >+ struct kvm_msix_mmio *mmio;
> > >+ int idx, ret = 0, entry, offset, r;
> > >+
> > >+ mutex_lock(&mmio_dev->lock);
> > >+ idx = get_mmio_table_index(mmio_dev, addr, len);
> > >+ if (idx< 0) {
> > >+ ret = -EOPNOTSUPP;
> > >+ goto out;
> > >+ }
> > >+ if ((addr& 0x3) || (len != 4&& len != 8))
> > >+ goto out;
> > >+
> > >+ offset = addr& 0xf;
> > >+ if (offset == PCI_MSIX_ENTRY_VECTOR_CTRL&& len == 8)
> > >+ goto out;
> > >+
> > >+ mmio =&mmio_dev->mmio[idx];
> > >+ entry = (addr - mmio->table_base_addr) / PCI_MSIX_ENTRY_SIZE;
> > >+ r = copy_from_user(val, (void __user *)(mmio->table_base_va +
> > >+ entry * PCI_MSIX_ENTRY_SIZE + offset), len);
> > >+ if (r)
> > >+ goto out;
> >
> > and return ret == 0?
>
> Yes. This operation should be handled by in-kernel MSI-X MMIO. So we return 0
> in order to omit this action. We can add warning to it later.
But it failed. We need to return -EFAULT.
> The same as above.
> >
> > >+
> > >+ if ((offset< PCI_MSIX_ENTRY_VECTOR_CTRL&& len == 4) ||
> > >+ (offset< PCI_MSIX_ENTRY_DATA&& len == 8))
> > >+ ret = -ENOTSYNC;
> >
> > goto out?
>
> No. This judgement only check if MSI data/address was touched. And the line
> below would check if we need to operate mask bit. Because in theory guest can
> use len=8 to modify MSI-X data and ctrl at the same time.
>
Ok, makes sense.
--
error compiling committee.c: too many arguments to function
next prev parent reply other threads:[~2011-01-31 13:09 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-01-06 10:19 [PATCH 0/3 v7] MSI-X MMIO support for KVM Sheng Yang
2011-01-06 10:19 ` [PATCH 1/3] KVM: Move struct kvm_io_device to kvm_host.h Sheng Yang
2011-01-06 10:19 ` [PATCH 2/3] KVM: Emulate MSI-X table in kernel Sheng Yang
2011-01-17 11:54 ` Marcelo Tosatti
2011-01-17 12:18 ` Sheng Yang
2011-01-17 12:18 ` Avi Kivity
2011-01-17 12:48 ` Marcelo Tosatti
2011-01-17 12:51 ` Avi Kivity
2011-01-17 15:52 ` Marcelo Tosatti
2011-01-17 16:01 ` Avi Kivity
2011-01-17 12:39 ` Marcelo Tosatti
2011-01-19 8:37 ` Sheng Yang
2011-01-17 12:29 ` Avi Kivity
2011-01-17 13:31 ` Michael S. Tsirkin
2011-01-17 13:47 ` Jan Kiszka
2011-01-30 4:38 ` Sheng Yang
2011-01-31 13:09 ` Avi Kivity [this message]
2011-02-01 4:21 ` Sheng Yang
2011-01-06 10:19 ` [PATCH 3/3] KVM: Add documents for MSI-X MMIO API Sheng Yang
2011-01-17 12:21 ` Avi Kivity
2011-01-17 12:35 ` Sheng Yang
2011-01-17 12:45 ` Avi Kivity
2011-01-19 8:21 ` Sheng Yang
2011-01-25 12:47 ` Avi Kivity
2011-01-26 9:05 ` Sheng Yang
2011-01-31 13:24 ` Avi Kivity
2011-02-01 4:26 ` Sheng Yang
2011-01-12 2:23 ` [PATCH 0/3 v7] MSI-X MMIO support for KVM Sheng Yang
-- strict thread matches above, loose matches on Subject: below --
2011-01-30 5:11 [PATCH 0/3 v8] " Sheng Yang
2011-01-30 5:11 ` [PATCH 2/3] KVM: Emulate MSI-X table in kernel Sheng Yang
2011-02-03 1:05 ` Marcelo Tosatti
2011-02-18 8:15 ` Sheng Yang
2011-02-22 17:58 ` Marcelo Tosatti
2011-02-23 0:19 ` Alex Williamson
2011-02-23 6:59 ` Sheng Yang
2011-02-23 8:45 ` Michael S. Tsirkin
2011-02-24 8:08 ` Sheng Yang
2011-02-24 10:11 ` Michael S. Tsirkin
2011-02-25 5:54 ` Sheng Yang
2011-02-24 9:44 ` Sheng Yang
2011-02-24 10:17 ` Michael S. Tsirkin
2011-02-25 6:12 ` Sheng Yang
2011-02-25 8:46 ` Michael S. Tsirkin
2011-02-23 16:34 ` Alex Williamson
2011-02-23 18:39 ` Michael S. Tsirkin
2011-02-23 19:02 ` Alex Williamson
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=4D46B475.7010209@redhat.com \
--to=avi@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=mst@redhat.com \
--cc=mtosatti@redhat.com \
--cc=sheng@linux.intel.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.