All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Nicholas Piggin" <npiggin@gmail.com>
To: "Akihiko Odaki" <akihiko.odaki@daynix.com>, <qemu-devel@nongnu.org>
Cc: "Michael S. Tsirkin" <mst@redhat.com>,
	"Marcel Apfelbaum" <marcel.apfelbaum@gmail.com>,
	"Fabiano Rosas" <farosas@suse.de>,
	"Laurent Vivier" <lvivier@redhat.com>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"Dmitry Fleytman" <dmitry.fleytman@gmail.com>,
	"Sriram Yagnaraman" <sriram.yagnaraman@ericsson.com>
Subject: Re: [PATCH 3/8] pci/msix: Implement PBA writes
Date: Wed, 18 Dec 2024 11:44:50 +1000	[thread overview]
Message-ID: <D6EG2PWL6EFK.2I261I824YNAC@gmail.com> (raw)
In-Reply-To: <5dd989ee-e9d3-4c49-9031-a4bc320bbaa9@daynix.com>

On Fri Dec 13, 2024 at 3:14 PM AEST, Akihiko Odaki wrote:
> On 2024/12/12 17:34, Nicholas Piggin wrote:
> > Implement MMIO PBA writes, 1 to trigger and 0 to clear.
> > 
> > This functionality is used by some qtests, which keep the msix irq
> > masked and test irq pending via the PBA bits, for simplicity. Some
> > tests expect to be able to clear the irq with a store, so a side-effect
> > of this is that qpci_msix_pending() would actually clear the pending
> > bit where it previously did not. This actually causes some [possibly
> > buggy] tests to fail. So to avoid breakage until tests are re-examined,
> > prior behavior of qpci_msix_pending() is kept by changing it to avoid
> > clearing PBA.
> > 
> > A new function qpci_msix_test_clear_pending() is added for tests that
> > do want the PBA clearing, and it will be used by XHCI and e1000e/igb
> > tests in subsequent changes.
>
> The specification says software should never write Pending Bits and its 
> result is undefined. Tests should have an alternative method to clear 
> Pending Bits.

Thanks for correcting me. I guess qpci_msix_pending() should not be
trying to write to the PBA either then.

> A possible solution is to unmask the interrupt, wait until the Pending 
> Bits get cleared, and mask it again.

PCI spec says

  If a masked vector has its Pending bit set, and the associated
  underlying interrupt events are somehow satisfied (usually by software
  though the exact manner is function-specific), the function must clear
  the Pending bit, to avoid sending a spurious interrupt message later
  when software unmasks the vector. However, if a subsequent interrupt
  event occurs while the vector is still masked, the function must again
  set the Pending bit.

It looks like e1000e acutally does that with e1000e_msix_clear{_one}.
So perhaps this will work just with the e1000e ICR clearing patch. I
will test.

e1000e and igb are the only devices that call msix_clr_pending. Does
that mean many others probably do not implement this behaviour
correctly?

Thanks,
Nick


  reply	other threads:[~2024-12-18  1:45 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-12-12  8:34 [PATCH 0/8] Add XHCI TR NOOP support, plus PCI, MSIX changes Nicholas Piggin
2024-12-12  8:34 ` [PATCH 1/8] qtest/pci: Enforce balanced iomap/unmap Nicholas Piggin
2024-12-12  8:34 ` [PATCH 2/8] qtest/libqos/pci: Fix qpci_msix_enable sharing bar0 Nicholas Piggin
2024-12-12  8:34 ` [PATCH 3/8] pci/msix: Implement PBA writes Nicholas Piggin
2024-12-13  5:14   ` Akihiko Odaki
2024-12-18  1:44     ` Nicholas Piggin [this message]
2024-12-12  8:34 ` [PATCH 4/8] tests/qtest/e1000e|igb: Fix e1000e and igb tests to re-trigger interrupts Nicholas Piggin
2024-12-12  8:34 ` [PATCH 5/8] hw/usb/xhci: Move HCD constants to a header and add register constants Nicholas Piggin
2024-12-18 15:08   ` Phil Dennis-Jordan
2024-12-19  1:50     ` Nicholas Piggin
2024-12-20 14:11       ` Phil Dennis-Jordan
2024-12-12  8:34 ` [PATCH 6/8] qtest/xhci: Add controller and device setup and ring tests Nicholas Piggin
2024-12-12  8:35 ` [PATCH 7/8] hw/usb/xhci: Support TR NOOP commands Nicholas Piggin
2024-12-12  8:35 ` [PATCH 8/8] qtest/xhci: add a test for " Nicholas Piggin

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=D6EG2PWL6EFK.2I261I824YNAC@gmail.com \
    --to=npiggin@gmail.com \
    --cc=akihiko.odaki@daynix.com \
    --cc=dmitry.fleytman@gmail.com \
    --cc=farosas@suse.de \
    --cc=lvivier@redhat.com \
    --cc=marcel.apfelbaum@gmail.com \
    --cc=mst@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=sriram.yagnaraman@ericsson.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.