All of lore.kernel.org
 help / color / mirror / Atom feed
From: Markus Armbruster <armbru@redhat.com>
To: "Marc-André Lureau" <marcandre.lureau@gmail.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>, cam <cam@cs.ualberta.ca>,
	Claudio Fontana <claudio.fontana@huawei.com>,
	QEMU <qemu-devel@nongnu.org>,
	David Marchand <david.marchand@6wind.com>
Subject: Re: [Qemu-devel] [PATCH 17/38] ivshmem: Clean up MSI-X conditions
Date: Wed, 02 Mar 2016 11:25:13 +0100	[thread overview]
Message-ID: <87si09npme.fsf@blackfin.pond.sub.org> (raw)
In-Reply-To: <CAJ+F1CJMbUesdaUmC+r+novy3FmdUsXNeSL+7brwi+0sMoOOsw@mail.gmail.com> ("Marc-André Lureau"'s message of "Tue, 1 Mar 2016 17:57:27 +0100")

Marc-André Lureau <marcandre.lureau@gmail.com> writes:

> On Mon, Feb 29, 2016 at 7:40 PM, Markus Armbruster <armbru@redhat.com> wrote:
>> There are three predicates related to MSI-X:
>>
>> * ivshmem_has_feature(s, IVSHMEM_MSI) is true unless the non-MSI-X
>>   variant of the device is selected with msi=off.
>>
>> * msix_present() is true when the device has the PCI capability MSI-X.
>>   It's initially false, and becomes true during successful realize of
>>   the MSI-X variant of the device.  Thus, it's the same as
>>   ivshmem_has_feature(s, IVSHMEM_MSI) for realized devices.
>>
>> * msix_enabled() is true when msix_present() is true and guest software
>>   has enabled MSI-X.
>>
>> Code that differs between the non-MSI-X and the MSI-X variant of the
>> device needs to be guarded by ivshmem_has_feature(s, IVSHMEM_MSI) or
>> by msix_present(), except the latter works only for realized devices.
>>
>> Code that depends on whether MSI-X is in use needs to be guarded with
>> msix_enabled().
>>
>> Code review led me to two minor messes:
>>
>> * ivshmem_vector_notify() calls msix_notify() even when
>>   !msix_enabled(), unlike most other MSI-X-capable devices.  As far as
>>   I can tell, msix_notify() does nothing when !msix_enabled().  Add
>>   the guard anyway.
>>
>
> sure, feel free to split in a seperate patch with my Review-by.
>
>> * Most callers of ivshmem_use_msix() guard it with
>>   ivshmem_has_feature(s, IVSHMEM_MSI).  Not necessary, because
>>   ivshmem_use_msix() does nothing when !msix_present().  That's
>>   ivshmem's only use of msix_present(), though.  Rename
>>   ivshmem_use_msix() to ivshmem_vector_use(), replace msix_present()
>>   by ivshmem_has_feature() there, and drop the redundant guards.
>
> I prefer that code related to msix remains within msix blocks if
> possible, improving readability imho.
>
> Furthermore, since the function is msix specific, I think it's worth
> keeping the "msix" in the name. Since ivshmem_msix_use() wasn't good
> enough for you, perhaps we need the full-blown
> ivshmem_msix_vectors_use() instead.

"Vectors" means actually two related, but distinct things with ivshmem:

* the communication channels to transmit interrupts among peers, and

* the MSI-X vectors.

You can have the former without the latter, with msi=off.

I guess there are two views of the function, both reasonable:

1. Prepare usage of "vectors", i.e. either kind.  Name the function
ivshmem_msix_vectors_use(), and call it unconditionally.  The fact that
it does only MSI-X stuff is implementation detail.

2. Prepare usage of MSI-X vectors.  Name the function
ivshmem_msix_vectors_use() or similar, and calls it only when
ivshmem_has_feature(s, IVSHMEM_MSI), for consistency with other MSI-X
functions.

You prefer 2, I prefer 1.  But it's not a deal-breaker for me; if you
feel strongly, I can do 2.

  reply	other threads:[~2016-03-02 10:25 UTC|newest]

Thread overview: 118+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-02-29 18:40 [Qemu-devel] [PATCH 00/38] ivshmem: Fixes, cleanups, device model split Markus Armbruster
2016-02-29 18:40 ` [Qemu-devel] [PATCH 01/38] exec: Fix memory allocation when memory path names new file Markus Armbruster
2016-03-01 11:35   ` Paolo Bonzini
2016-03-01 11:58     ` Markus Armbruster
2016-03-04 18:50     ` Markus Armbruster
2016-03-07 13:12       ` Paolo Bonzini
2016-02-29 18:40 ` [Qemu-devel] [PATCH 02/38] qemu-doc: Fix ivshmem huge page example Markus Armbruster
2016-03-01 10:51   ` Marc-André Lureau
2016-03-01 11:35   ` Paolo Bonzini
2016-02-29 18:40 ` [Qemu-devel] [PATCH 03/38] event_notifier: Make event_notifier_init_fd() #ifdef CONFIG_EVENTFD Markus Armbruster
2016-03-01 10:57   ` Marc-André Lureau
2016-03-01 12:00     ` Markus Armbruster
2016-03-01 12:05       ` Paolo Bonzini
2016-03-01 11:35   ` Paolo Bonzini
2016-02-29 18:40 ` [Qemu-devel] [PATCH 04/38] tests/libqos/pci-pc: Fix qpci_pc_iomap() to map BARs aligned Markus Armbruster
2016-03-01 11:05   ` Marc-André Lureau
2016-03-01 12:05     ` Markus Armbruster
2016-02-29 18:40 ` [Qemu-devel] [PATCH 05/38] ivshmem-test: Improve test case /ivshmem/single Markus Armbruster
2016-03-01 11:06   ` Marc-André Lureau
2016-02-29 18:40 ` [Qemu-devel] [PATCH 06/38] ivshmem-test: Clean up wait for devices to become operational Markus Armbruster
2016-03-01 11:10   ` Marc-André Lureau
2016-02-29 18:40 ` [Qemu-devel] [PATCH 07/38] ivshmem-test: Improve test cases /ivshmem/server-* Markus Armbruster
2016-03-01 11:13   ` Marc-André Lureau
2016-02-29 18:40 ` [Qemu-devel] [PATCH 08/38] ivshmem: Rewrite specification document Markus Armbruster
2016-03-01 11:25   ` Marc-André Lureau
2016-03-01 15:46   ` Eric Blake
2016-03-02  9:50     ` Markus Armbruster
2016-02-29 18:40 ` [Qemu-devel] [PATCH 09/38] ivshmem: Add missing newlines to debug printfs Markus Armbruster
2016-03-01 12:20   ` Marc-André Lureau
2016-02-29 18:40 ` [Qemu-devel] [PATCH 10/38] ivshmem: Compile debug prints unconditionally to prevent bit-rot Markus Armbruster
2016-03-01 12:22   ` Marc-André Lureau
2016-03-01 15:49     ` Eric Blake
2016-03-02  9:51       ` Markus Armbruster
2016-03-02 15:52         ` Eric Blake
2016-02-29 18:40 ` [Qemu-devel] [PATCH 11/38] ivshmem: Clean up after commit 9940c32 Markus Armbruster
2016-03-01 12:47   ` Marc-André Lureau
2016-02-29 18:40 ` [Qemu-devel] [PATCH 12/38] ivshmem: Drop ivshmem_event() stub Markus Armbruster
2016-03-01 12:48   ` Marc-André Lureau
2016-02-29 18:40 ` [Qemu-devel] [PATCH 13/38] ivshmem: Don't destroy the chardev on version mismatch Markus Armbruster
2016-03-01 15:39   ` Marc-André Lureau
2016-03-02  9:52     ` Markus Armbruster
2016-02-29 18:40 ` [Qemu-devel] [PATCH 14/38] ivshmem: Fix harmless misuse of Error Markus Armbruster
2016-03-01 15:47   ` Marc-André Lureau
2016-02-29 18:40 ` [Qemu-devel] [PATCH 15/38] ivshmem: Failed realize() can leave migration blocker behind Markus Armbruster
2016-03-01 15:59   ` Marc-André Lureau
2016-03-02  9:54     ` Markus Armbruster
2016-03-02 10:50       ` Marc-André Lureau
2016-02-29 18:40 ` [Qemu-devel] [PATCH 16/38] ivshmem: Clean up register callbacks Markus Armbruster
2016-03-01 16:04   ` Marc-André Lureau
2016-02-29 18:40 ` [Qemu-devel] [PATCH 17/38] ivshmem: Clean up MSI-X conditions Markus Armbruster
2016-03-01 16:57   ` Marc-André Lureau
2016-03-02 10:25     ` Markus Armbruster [this message]
2016-02-29 18:40 ` [Qemu-devel] [PATCH 18/38] ivshmem: Leave INTx alone when using MSI-X Markus Armbruster
2016-03-01 17:14   ` Marc-André Lureau
2016-03-01 17:30     ` Paolo Bonzini
2016-03-02 11:04       ` Markus Armbruster
2016-03-02 14:15         ` Paolo Bonzini
2016-03-02 15:50           ` Markus Armbruster
2016-02-29 18:40 ` [Qemu-devel] [PATCH 19/38] ivshmem: Assert interrupts are set up once Markus Armbruster
2016-03-02 12:02   ` Marc-André Lureau
2016-02-29 18:40 ` [Qemu-devel] [PATCH 20/38] ivshmem: Simplify rejection of invalid peer ID from server Markus Armbruster
2016-03-02 15:08   ` Marc-André Lureau
2016-02-29 18:40 ` [Qemu-devel] [PATCH 21/38] ivshmem: Disentangle ivshmem_read() Markus Armbruster
2016-03-02 15:28   ` Marc-André Lureau
2016-03-02 15:53     ` Markus Armbruster
2016-03-02 17:33       ` Marc-André Lureau
2016-03-02 19:15         ` Markus Armbruster
2016-02-29 18:40 ` [Qemu-devel] [PATCH 22/38] ivshmem: Plug leaks on unplug, fix peer disconnect Markus Armbruster
2016-03-02 17:47   ` Marc-André Lureau
2016-03-02 19:19     ` Markus Armbruster
2016-03-02 23:52       ` Marc-André Lureau
2016-02-29 18:40 ` [Qemu-devel] [PATCH 23/38] ivshmem: Receive shared memory synchronously in realize() Markus Armbruster
2016-03-02 18:11   ` Marc-André Lureau
2016-03-02 19:28     ` Markus Armbruster
2016-02-29 18:40 ` [Qemu-devel] [PATCH 24/38] ivshmem: Propagate errors through ivshmem_recv_setup() Markus Armbruster
2016-03-02 18:27   ` Marc-André Lureau
2016-03-02 19:35     ` Markus Armbruster
2016-03-03  0:03       ` Marc-André Lureau
2016-03-03  7:16         ` Markus Armbruster
2016-02-29 18:40 ` [Qemu-devel] [PATCH 25/38] ivshmem: Rely on server sending the ID right after the version Markus Armbruster
2016-03-02 18:36   ` Marc-André Lureau
2016-02-29 18:40 ` [Qemu-devel] [PATCH 26/38] ivshmem: Drop the hackish test for UNIX domain chardev Markus Armbruster
2016-03-02 18:38   ` Marc-André Lureau
2016-02-29 18:40 ` [Qemu-devel] [PATCH 27/38] ivshmem: Simplify how we cope with short reads from server Markus Armbruster
2016-03-02 18:41   ` Marc-André Lureau
2016-03-02 19:38     ` Markus Armbruster
2016-02-29 18:40 ` [Qemu-devel] [PATCH 28/38] ivshmem: Tighten check of property "size" Markus Armbruster
2016-03-02 18:44   ` Marc-André Lureau
2016-02-29 18:40 ` [Qemu-devel] [PATCH 29/38] ivshmem: Implement shm=... with a memory backend Markus Armbruster
2016-03-01 11:37   ` Paolo Bonzini
2016-03-01 12:08     ` Markus Armbruster
2016-02-29 18:40 ` [Qemu-devel] [PATCH 30/38] ivshmem: Simplify memory regions for BAR 2 (shared memory) Markus Armbruster
2016-03-01 11:42   ` Paolo Bonzini
2016-03-01 12:14     ` Markus Armbruster
2016-03-01 12:17       ` Paolo Bonzini
2016-03-01 11:46   ` Paolo Bonzini
2016-03-01 14:06     ` Markus Armbruster
2016-03-01 15:15       ` Paolo Bonzini
2016-03-02 11:06         ` Markus Armbruster
2016-02-29 18:40 ` [Qemu-devel] [PATCH 31/38] ivshmem: Inline check_shm_size() into its only caller Markus Armbruster
2016-03-02 18:49   ` Marc-André Lureau
2016-02-29 18:40 ` [Qemu-devel] [PATCH 32/38] qdev: New DEFINE_PROP_ON_OFF_AUTO Markus Armbruster
2016-03-02 18:54   ` Marc-André Lureau
2016-02-29 18:40 ` [Qemu-devel] [PATCH 33/38] ivshmem: Replace int role_val by OnOffAuto master Markus Armbruster
2016-03-02 18:56   ` Marc-André Lureau
2016-03-02 19:39     ` Markus Armbruster
2016-02-29 18:40 ` [Qemu-devel] [PATCH 34/38] ivshmem: Split ivshmem-plain, ivshmem-doorbell off ivshmem Markus Armbruster
2016-03-03 13:53   ` Marc-André Lureau
2016-02-29 18:40 ` [Qemu-devel] [PATCH 35/38] ivshmem: Clean up after the previous commit Markus Armbruster
2016-03-03 13:56   ` Marc-André Lureau
2016-02-29 18:40 ` [Qemu-devel] [PATCH 36/38] ivshmem: Drop ivshmem property x-memdev Markus Armbruster
2016-03-03 14:03   ` Marc-André Lureau
2016-03-03 14:17     ` Markus Armbruster
2016-02-29 18:40 ` [Qemu-devel] [PATCH 37/38] ivshmem: Require master to have ID zero Markus Armbruster
2016-03-03 14:11   ` Marc-André Lureau
2016-02-29 18:40 ` [Qemu-devel] [PATCH 38/38] contrib/ivshmem-server: Print "not for production" warning Markus Armbruster
2016-03-03 14:15   ` Marc-André Lureau
2016-03-07 18:42     ` Markus Armbruster

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=87si09npme.fsf@blackfin.pond.sub.org \
    --to=armbru@redhat.com \
    --cc=cam@cs.ualberta.ca \
    --cc=claudio.fontana@huawei.com \
    --cc=david.marchand@6wind.com \
    --cc=marcandre.lureau@gmail.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.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 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.