All of lore.kernel.org
 help / color / mirror / Atom feed
From: Cao jin <caoj.fnst@cn.fujitsu.com>
To: Markus Armbruster <armbru@redhat.com>
Cc: qemu-devel@nongnu.org, Jiri Pirko <jiri@resnulli.us>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	Jason Wang <jasowang@redhat.com>,
	Marcel Apfelbaum <marcel@redhat.com>,
	Alex Williamson <alex.williamson@redhat.com>,
	Hannes Reinecke <hare@suse.de>,
	Dmitry Fleytman <dmitry@daynix.com>,
	Paolo Bonzini <pbonzini@redhat.com>,
	Gerd Hoffmann <kraxel@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v2 3/5] pci: Convert msix_init() to Error and fix callers to check it
Date: Tue, 13 Sep 2016 14:04:48 +0800	[thread overview]
Message-ID: <57D79700.3060605@cn.fujitsu.com> (raw)
In-Reply-To: <87oa3tw7oz.fsf@dusky.pond.sub.org>



On 09/12/2016 09:47 PM, Markus Armbruster wrote:
> Cao jin <caoj.fnst@cn.fujitsu.com> writes:
>

>>   static void
>>   vmxnet3_cleanup_msix(VMXNET3State *s)
>>   {
>> @@ -2315,9 +2289,19 @@ static void vmxnet3_pci_realize(PCIDevice *pci_dev, Error **errp)
>>        * is a programming error. Fall back to INTx silently on -ENOTSUP */
>>       assert(!ret || ret == -ENOTSUP);
>>
>> -    if (!vmxnet3_init_msix(s)) {
>> -        VMW_WRPRN("Failed to initialize MSI-X, configuration is inconsistent.");
>> -    }
>> +    ret = msix_init(pci_dev, VMXNET3_MAX_INTRS,
>> +                    &s->msix_bar,
>> +                    VMXNET3_MSIX_BAR_IDX, VMXNET3_OFF_MSIX_TABLE,
>> +                    &s->msix_bar,
>> +                    VMXNET3_MSIX_BAR_IDX, VMXNET3_OFF_MSIX_PBA(s),
>> +                    VMXNET3_MSIX_OFFSET(s), NULL);
>> +    /* Any error other than -ENOTSUP(board's MSI support is broken)
>> +     * is a programming error. Fall back to INTx silently on -ENOTSUP */
>> +    assert(!ret || ret == -ENOTSUP);
>> +    s->msix_used = !ret;
>> +    /* VMXNET3_MAX_INTRS is passed, so it will never fail when mark vector.
>> +     * For simplicity, no need to check return value. */
>> +    vmxnet3_use_msix_vectors(s, VMXNET3_MAX_INTRS);
>>
>>       vmxnet3_net_init(s);
>
> Uh, this is more than just a conversion to Error.  Before, the code
> falls back to not using MSI-X on any error, with a warning.  After, it
> falls back on ENOTSUP only, silently, and crashes on any other error.
> Such a change needs to be documented in the commit message, or be in a
> separate patch.  I prefer separate patch.
>

Dmitry has option that we should check the return value of 
msix_vector_use and prefer to keep init function, so I will withdraw 
this modification.

>> diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c
>> index 188f954..4280c5d 100644
>> --- a/hw/usb/hcd-xhci.c
>> +++ b/hw/usb/hcd-xhci.c
>> @@ -3594,25 +3594,6 @@ static void usb_xhci_realize(struct PCIDevice *dev, Error **errp)
>>       dev->config[PCI_CACHE_LINE_SIZE] = 0x10;
>>       dev->config[0x60] = 0x30; /* release number */
>>
>> -    usb_xhci_init(xhci);
>> -
>> -    if (xhci->msi != ON_OFF_AUTO_OFF) {
>> -        ret = msi_init(dev, 0x70, xhci->numintrs, true, false, &err);
>> -        /* Any error other than -ENOTSUP(board's MSI support is broken)
>> -         * is a programming error */
>> -        assert(!ret || ret == -ENOTSUP);
>> -        if (ret && xhci->msi == ON_OFF_AUTO_ON) {
>> -            /* Can't satisfy user's explicit msi=on request, fail */
>> -            error_append_hint(&err, "You have to use msi=auto (default) or "
>> -                    "msi=off with this machine type.\n");
>> -            error_propagate(errp, err);
>> -            return;
>> -        }
>> -        assert(!err || xhci->msi == ON_OFF_AUTO_AUTO);
>> -        /* With msi=auto, we fall back to MSI off silently */
>> -        error_free(err);
>> -    }
>> -
>>       if (xhci->numintrs > MAXINTRS) {
>>           xhci->numintrs = MAXINTRS;
>>       }
>> @@ -3622,21 +3603,60 @@ static void usb_xhci_realize(struct PCIDevice *dev, Error **errp)
>>       if (xhci->numintrs < 1) {
>>           xhci->numintrs = 1;
>>       }
>> +
>>       if (xhci->numslots > MAXSLOTS) {
>>           xhci->numslots = MAXSLOTS;
>>       }
>>       if (xhci->numslots < 1) {
>>           xhci->numslots = 1;
>>       }
>> +
>>       if (xhci_get_flag(xhci, XHCI_FLAG_ENABLE_STREAMS)) {
>>           xhci->max_pstreams_mask = 7; /* == 256 primary streams */
>>       } else {
>>           xhci->max_pstreams_mask = 0;
>>       }
>>
>> -    xhci->mfwrap_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL, xhci_mfwrap_timer, xhci);
>> +    if (xhci->msi != ON_OFF_AUTO_OFF) {
>> +        ret = msi_init(dev, 0x70, xhci->numintrs, true, false, &err);
>> +        /* Any error other than -ENOTSUP(board's MSI support is broken)
>> +         * is a programming error */
>> +        assert(!ret || ret == -ENOTSUP);
>> +        if (ret && xhci->msi == ON_OFF_AUTO_ON) {
>> +            /* Can't satisfy user's explicit msi=on request, fail */
>> +            error_append_hint(&err, "You have to use msi=auto (default) or "
>> +                    "msi=off with this machine type.\n");
>> +            error_propagate(errp, err);
>> +            return;
>> +        }
>> +        assert(!err || xhci->msi == ON_OFF_AUTO_AUTO);
>> +        /* With msi=auto, we fall back to MSI off silently */
>> +        error_free(err);
>> +    }
>
> Can you explain why you're moving this code?
>

Sorry I forget to mention this: msi_init() uses xhci->numintrs, but 
there is value checking/correcting on xhci->numintrs, it should be done 
before using.

-- 
Yours Sincerely,

Cao jin

  reply	other threads:[~2016-09-13  6:04 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-08-23  9:27 [Qemu-devel] [PATCH v2 0/5] Convert msix_init() to error Cao jin
2016-08-23  9:27 ` [Qemu-devel] [PATCH v2 1/5] msix_init: assert programming error Cao jin
2016-09-12 13:29   ` Markus Armbruster
2016-09-13  2:51     ` Cao jin
2016-09-13  6:16       ` Markus Armbruster
2016-09-13 14:49         ` Alex Williamson
2016-09-29 13:11           ` Markus Armbruster
2016-09-29 16:10             ` Alex Williamson
2016-09-30 14:06               ` Markus Armbruster
2016-09-30 18:06                 ` Dr. David Alan Gilbert
2016-10-04  9:33                   ` Markus Armbruster
2016-10-04 11:19                     ` Dr. David Alan Gilbert
2016-10-06  7:00                 ` Cao jin
2016-08-23  9:27 ` [Qemu-devel] [PATCH v2 2/5] msix: Follow CODING_STYLE Cao jin
2016-08-23  9:27 ` [Qemu-devel] [PATCH v2 3/5] pci: Convert msix_init() to Error and fix callers to check it Cao jin
2016-09-12 13:47   ` Markus Armbruster
2016-09-13  6:04     ` Cao jin [this message]
2016-09-13  8:27       ` Markus Armbruster
2016-08-23  9:27 ` [Qemu-devel] [PATCH v2 4/5] megasas: remove unnecessary megasas_use_msix() Cao jin
2016-08-23  9:27 ` [Qemu-devel] [PATCH v2 5/5] megasas: undo the overwrites of user configuration Cao jin
2016-09-06 12:42 ` [Qemu-devel] [PATCH v2 0/5] Convert msix_init() to error Cao jin

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=57D79700.3060605@cn.fujitsu.com \
    --to=caoj.fnst@cn.fujitsu.com \
    --cc=alex.williamson@redhat.com \
    --cc=armbru@redhat.com \
    --cc=dmitry@daynix.com \
    --cc=hare@suse.de \
    --cc=jasowang@redhat.com \
    --cc=jiri@resnulli.us \
    --cc=kraxel@redhat.com \
    --cc=marcel@redhat.com \
    --cc=mst@redhat.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.