qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Alexey Kardashevskiy <aik@ozlabs.ru>
To: Jan Kiszka <jan.kiszka@siemens.com>
Cc: kvm@vger.kernel.org, qemu-devel@nongnu.org,
	Alex Graf <agraf@suse.de>,
	Alex Williamson <alex.williamson@redhat.com>,
	David Gibson <david@gibson.dropbear.id.au>
Subject: Re: [Qemu-devel] [RFC PATCH] PCI: Introduce INTx check & mask API
Date: Fri, 25 May 2012 11:18:43 +1000	[thread overview]
Message-ID: <4FBEDDF3.20108@ozlabs.ru> (raw)
In-Reply-To: <4FBE2349.6040800@siemens.com>

On 24/05/12 22:02, Jan Kiszka wrote:
> On 2012-05-24 04:44, Alexey Kardashevskiy wrote:
>> [Found while debugging VFIO on POWER but it is platform independent]
>>
>> There is a feature in PCI (>=2.3?) to mask/unmask INTx via PCI_COMMAND and
>> PCI_STATUS registers.
> 
> Yes, 2.3 introduced this. Masking is done via command register, checking
> if the source was the PCI in question via the status register. The
> latter is important for supporting IRQ sharing - and that's why we
> introduced this masking API to the PCI layer.


Is not it just a quite small optimization to not to disable interrupts on all devices which share
the same IRQ but just on those who fired an interrupt? If so, do PCI devices really often share
IRQs? Does not supporting this mean real slowdown on such devices?

As far as I understand, everyone who cares about performance uses MSI/MSIX, no?


>> And there is some API to support that (commit a2e27787f893621c5a6b865acf6b7766f8671328).
>>
>> I have a network adapter:
>> 0001:00:01.0 Ethernet controller: Chelsio Communications Inc T310 10GbE Single Port Adapter
>> 	Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr+ Stepping- SERR+ FastB2B- DisINTx-
>> 	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
>>
>> pci_intx_mask_supported() reports that the feature is supported for this adapter
>> BUT the adapter does not set PCI_STATUS_INTERRUPT so pci_check_and_set_intx_mask()
>> never changes PCI_COMMAND and INTx does not work on it when we use it as VFIO-PCI device.
>>
>> If I remove the check of this bit, it works fine as it is called from an interrupt handler and
>> Status bit check is redundant.
>>
>> Opened a spec:
>> PCI LOCAL BUS SPECIFICATION, REV. 3.0, Table 6-2: Status Register Bits
>> ===
>> 3	This read-only bit reflects the state of the interrupt in the
>> device/function. Only when the Interrupt Disable bit in the command
>> register is a 0 and this Interrupt Status bit is a 1, will the
>> device’s/function’s INTx# signal be asserted. Setting the Interrupt
>>    Disable bit to a 1 has no effect on the state of this bit.
>> ===
>> With this adapter, INTx# is asserted but Status bit is still 0.
>>
>> Is it mandatory for a device to set Status bit if it supports INTx masking?
>>
>> 2 Alex: if it is mandatory, then we need to be able to disable pci_2_3 in VFIO-PCI
>> somehow.
> 
> Since PCI 2.3, this bit is mandatory, and it should be independent of
> the masking bit. The question is, if your device is supposed to support
> 2.3, thus is just buggy, or if our detection algorithm is unreliable. It
> basically builds on the assumption that, if we can flip the mask bit,
> the feature should be present. I guess that is the best we can do. Maybe
> we can augment this with a blacklist of devices that "support" flipping
> without actually providing the feature.

It is a good moment to start :)
Not sure where - in VFIO or along with that PCI INTx API.

Here is that broken device:
aik@vpl2:~$ lspci -s 1:1:0.0
0001:01:00.0 Ethernet controller: Chelsio Communications Inc T310 10GbE Single Port Adapter
aik@vpl2:~$ lspci -ns 1:1:0.0
0001:01:00.0 0200: 1425:0030


-- 
Alexey

  parent reply	other threads:[~2012-05-25  1:18 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-05-24  7:44 [Qemu-devel] [RFC PATCH] PCI: Introduce INTx check & mask API Alexey Kardashevskiy
2012-05-24 12:02 ` Jan Kiszka
2012-05-24 14:41   ` Alex Williamson
2012-05-25  1:06     ` Alexey Kardashevskiy
2012-06-05  1:39     ` Benjamin Herrenschmidt
2012-06-05  1:44       ` Alexander Graf
2012-06-05  2:56         ` Benjamin Herrenschmidt
2012-05-25  1:18   ` Alexey Kardashevskiy [this message]
2012-05-25  2:29     ` Jan Kiszka
2012-05-25  2:47       ` Alexey Kardashevskiy
2012-05-25 10:43         ` Jan Kiszka
2012-05-25 11:26           ` Alexey Kardashevskiy
2012-05-25 11:31             ` Jan Kiszka
2012-06-05  1:39   ` Benjamin Herrenschmidt

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=4FBEDDF3.20108@ozlabs.ru \
    --to=aik@ozlabs.ru \
    --cc=agraf@suse.de \
    --cc=alex.williamson@redhat.com \
    --cc=david@gibson.dropbear.id.au \
    --cc=jan.kiszka@siemens.com \
    --cc=kvm@vger.kernel.org \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).