* [PATCH 0/3] xen: fix usage of devices behind a VMD bridge
@ 2025-01-10 14:01 Roger Pau Monne
2025-01-10 14:01 ` [PATCH 1/3] xen/pci: do not register devices outside of PCI segment scope Roger Pau Monne
` (2 more replies)
0 siblings, 3 replies; 24+ messages in thread
From: Roger Pau Monne @ 2025-01-10 14:01 UTC (permalink / raw)
To: linux-kernel, xen-devel; +Cc: Roger Pau Monne
Hello,
The following series should fix the usage of devices behind a VMD bridge
when running Linux as a Xen PV hardware domain (dom0). I've only been
able to test PV. I think PVH should also work but I don't have hardware
capable of testing it right now.
I don't expect the first two patches to be problematic, the last patch
is likely to be more controversial. I've tested it internally and
didn't see any issues, but my testing of PV mode is mostly limited to
dom0.
Thanks, Roger.
Roger Pau Monne (3):
xen/pci: do not register devices outside of PCI segment scope
vmd: disable MSI remapping bypass under Xen
pci/msi: remove pci_msi_ignore_mask
arch/x86/pci/xen.c | 8 ++------
drivers/pci/controller/vmd.c | 9 +++++++++
drivers/pci/msi/msi.c | 36 ++++++++++++++++++++----------------
drivers/xen/pci.c | 19 +++++++++++++++++++
include/linux/msi.h | 3 ++-
kernel/irq/msi.c | 2 +-
6 files changed, 53 insertions(+), 24 deletions(-)
--
2.46.0
^ permalink raw reply [flat|nested] 24+ messages in thread
* [PATCH 1/3] xen/pci: do not register devices outside of PCI segment scope
2025-01-10 14:01 [PATCH 0/3] xen: fix usage of devices behind a VMD bridge Roger Pau Monne
@ 2025-01-10 14:01 ` Roger Pau Monne
2025-01-10 22:21 ` Bjorn Helgaas
2025-01-13 7:17 ` Jan Beulich
2025-01-10 14:01 ` [PATCH 2/3] vmd: disable MSI remapping bypass under Xen Roger Pau Monne
2025-01-10 14:01 ` [PATCH 3/3] pci/msi: remove pci_msi_ignore_mask Roger Pau Monne
2 siblings, 2 replies; 24+ messages in thread
From: Roger Pau Monne @ 2025-01-10 14:01 UTC (permalink / raw)
To: linux-kernel, xen-devel
Cc: Roger Pau Monne, Juergen Gross, Stefano Stabellini,
Oleksandr Tyshchenko
The PCI segment value is limited to 16 bits, however there are buses like VMD
that fake being part of the PCI topology by adding segment with a number
outside the scope of the PCI firmware specification range (>= 0x10000). The
MCFG ACPI Table "PCI Segment Group Number" field is defined as having a 16 bit
width.
Attempting to register or manage those devices with Xen would result in errors
at best, or overlaps with existing devices living on the truncated equivalent
segment values.
Skip notifying Xen about those devices.
Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
---
drivers/xen/pci.c | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/drivers/xen/pci.c b/drivers/xen/pci.c
index 416f231809cb..08e82fd1263e 100644
--- a/drivers/xen/pci.c
+++ b/drivers/xen/pci.c
@@ -43,6 +43,13 @@ static int xen_add_device(struct device *dev)
pci_mcfg_reserved = true;
}
#endif
+
+ if (pci_domain_nr(pci_dev->bus) >> 16) {
+ dev_info(dev,
+ "not registering with Xen: invalid PCI segment\n");
+ return 0;
+ }
+
if (pci_seg_supported) {
DEFINE_RAW_FLEX(struct physdev_pci_device_add, add, optarr, 1);
@@ -149,6 +156,12 @@ static int xen_remove_device(struct device *dev)
int r;
struct pci_dev *pci_dev = to_pci_dev(dev);
+ if (pci_domain_nr(pci_dev->bus) >> 16) {
+ dev_info(dev,
+ "not unregistering with Xen: invalid PCI segment\n");
+ return 0;
+ }
+
if (pci_seg_supported) {
struct physdev_pci_device device = {
.seg = pci_domain_nr(pci_dev->bus),
@@ -182,6 +195,12 @@ int xen_reset_device(const struct pci_dev *dev)
.flags = PCI_DEVICE_RESET_FLR,
};
+ if (pci_domain_nr(dev->bus) >> 16) {
+ dev_info(&dev->dev,
+ "unable to notify Xen of device reset: invalid PCI segment\n");
+ return 0;
+ }
+
return HYPERVISOR_physdev_op(PHYSDEVOP_pci_device_reset, &device);
}
EXPORT_SYMBOL_GPL(xen_reset_device);
--
2.46.0
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 2/3] vmd: disable MSI remapping bypass under Xen
2025-01-10 14:01 [PATCH 0/3] xen: fix usage of devices behind a VMD bridge Roger Pau Monne
2025-01-10 14:01 ` [PATCH 1/3] xen/pci: do not register devices outside of PCI segment scope Roger Pau Monne
@ 2025-01-10 14:01 ` Roger Pau Monne
2025-01-10 22:25 ` Bjorn Helgaas
2025-01-12 2:57 ` kernel test robot
2025-01-10 14:01 ` [PATCH 3/3] pci/msi: remove pci_msi_ignore_mask Roger Pau Monne
2 siblings, 2 replies; 24+ messages in thread
From: Roger Pau Monne @ 2025-01-10 14:01 UTC (permalink / raw)
To: linux-kernel, xen-devel, linux-pci
Cc: Roger Pau Monne, Nirmal Patel, Jonathan Derrick,
Lorenzo Pieralisi, Krzysztof Wilczyński,
Manivannan Sadhasivam, Rob Herring, Bjorn Helgaas
MSI remapping bypass (directly configuring MSI entries for devices on the VMD
bus) won't work under Xen, as Xen is not aware of devices in such bus, and
hence cannot configure the entries using the pIRQ interface in the PV case, and
in the PVH case traps won't be setup for MSI entries for such devices.
Until Xen is aware of devices in the VMD bus prevent the
VMD_FEAT_CAN_BYPASS_MSI_REMAP capability from being used when running as any
kind of Xen guest.
Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
---
drivers/pci/controller/vmd.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/drivers/pci/controller/vmd.c b/drivers/pci/controller/vmd.c
index 264a180403a0..d9b7510ace29 100644
--- a/drivers/pci/controller/vmd.c
+++ b/drivers/pci/controller/vmd.c
@@ -965,6 +965,15 @@ static int vmd_probe(struct pci_dev *dev, const struct pci_device_id *id)
struct vmd_dev *vmd;
int err;
+ if (xen_domain())
+ /*
+ * Xen doesn't have knowledge about devices in the VMD bus.
+ * Bypass of MSI remapping won't work in that case as direct
+ * write to the MSI entries won't result in functional
+ * interrupts.
+ */
+ features &= ~VMD_FEAT_CAN_BYPASS_MSI_REMAP;
+
if (resource_size(&dev->resource[VMD_CFGBAR]) < (1 << 20))
return -ENOMEM;
--
2.46.0
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 3/3] pci/msi: remove pci_msi_ignore_mask
2025-01-10 14:01 [PATCH 0/3] xen: fix usage of devices behind a VMD bridge Roger Pau Monne
2025-01-10 14:01 ` [PATCH 1/3] xen/pci: do not register devices outside of PCI segment scope Roger Pau Monne
2025-01-10 14:01 ` [PATCH 2/3] vmd: disable MSI remapping bypass under Xen Roger Pau Monne
@ 2025-01-10 14:01 ` Roger Pau Monne
2025-01-10 22:30 ` Bjorn Helgaas
` (2 more replies)
2 siblings, 3 replies; 24+ messages in thread
From: Roger Pau Monne @ 2025-01-10 14:01 UTC (permalink / raw)
To: linux-kernel, xen-devel, linux-pci
Cc: Roger Pau Monne, Juergen Gross, Bjorn Helgaas, Thomas Gleixner,
Ingo Molnar, Borislav Petkov, Dave Hansen, x86, H. Peter Anvin
Setting pci_msi_ignore_mask inhibits the toggling of the mask bit for both MSI
and MSI-X entries globally, regardless of the IRQ chip they are using. Only
Xen sets the pci_msi_ignore_mask when routing physical interrupts over event
channels, to prevent PCI code from attempting to toggle the maskbit, as it's
Xen that controls the bit.
However, the pci_msi_ignore_mask being global will affect devices that use MSI
interrupts but are not routing those interrupts over event channels (not using
the Xen pIRQ chip). One example is devices behind a VMD PCI bridge. In that
scenario the VMD bridge configures MSI(-X) using the normal IRQ chip (the pIRQ
one in the Xen case), and devices behind the bridge configure the MSI entries
using indexes into the VMD bridge MSI table. The VMD bridge then demultiplexes
such interrupts and delivers to the destination device(s). Having
pci_msi_ignore_mask set in that scenario prevents (un)masking of MSI entries
for devices behind the VMD bridge.
Move the signaling of no entry masking into the MSI domain flags, as that
allows setting it on a per-domain basis. Set it for the Xen MSI domain that
uses the pIRQ chip, while leaving it unset for the rest of the cases.
Remove pci_msi_ignore_mask at once, since it was only used by Xen code, and
with Xen dropping usage the variable is unneeded.
This fixes using devices behind a VMD bridge on Xen PV hardware domains.
Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
---
arch/x86/pci/xen.c | 8 ++------
drivers/pci/msi/msi.c | 36 ++++++++++++++++++++----------------
include/linux/msi.h | 3 ++-
kernel/irq/msi.c | 2 +-
4 files changed, 25 insertions(+), 24 deletions(-)
diff --git a/arch/x86/pci/xen.c b/arch/x86/pci/xen.c
index 0f2fe524f60d..b8755cde2419 100644
--- a/arch/x86/pci/xen.c
+++ b/arch/x86/pci/xen.c
@@ -436,7 +436,8 @@ static struct msi_domain_ops xen_pci_msi_domain_ops = {
};
static struct msi_domain_info xen_pci_msi_domain_info = {
- .flags = MSI_FLAG_PCI_MSIX | MSI_FLAG_FREE_MSI_DESCS | MSI_FLAG_DEV_SYSFS,
+ .flags = MSI_FLAG_PCI_MSIX | MSI_FLAG_FREE_MSI_DESCS |
+ MSI_FLAG_DEV_SYSFS | MSI_FLAG_NO_MASK,
.ops = &xen_pci_msi_domain_ops,
};
@@ -484,11 +485,6 @@ static __init void xen_setup_pci_msi(void)
* in allocating the native domain and never use it.
*/
x86_init.irqs.create_pci_msi_domain = xen_create_pci_msi_domain;
- /*
- * With XEN PIRQ/Eventchannels in use PCI/MSI[-X] masking is solely
- * controlled by the hypervisor.
- */
- pci_msi_ignore_mask = 1;
}
#else /* CONFIG_PCI_MSI */
diff --git a/drivers/pci/msi/msi.c b/drivers/pci/msi/msi.c
index 3a45879d85db..cb42298f6a97 100644
--- a/drivers/pci/msi/msi.c
+++ b/drivers/pci/msi/msi.c
@@ -15,7 +15,6 @@
#include "msi.h"
int pci_msi_enable = 1;
-int pci_msi_ignore_mask;
/**
* pci_msi_supported - check whether MSI may be enabled on a device
@@ -285,6 +284,8 @@ static void pci_msi_set_enable(struct pci_dev *dev, int enable)
static int msi_setup_msi_desc(struct pci_dev *dev, int nvec,
struct irq_affinity_desc *masks)
{
+ const struct irq_domain *d = dev_get_msi_domain(&dev->dev);
+ const struct msi_domain_info *info = d->host_data;
struct msi_desc desc;
u16 control;
@@ -295,8 +296,7 @@ static int msi_setup_msi_desc(struct pci_dev *dev, int nvec,
/* Lies, damned lies, and MSIs */
if (dev->dev_flags & PCI_DEV_FLAGS_HAS_MSI_MASKING)
control |= PCI_MSI_FLAGS_MASKBIT;
- /* Respect XEN's mask disabling */
- if (pci_msi_ignore_mask)
+ if (info->flags & MSI_FLAG_NO_MASK)
control &= ~PCI_MSI_FLAGS_MASKBIT;
desc.nvec_used = nvec;
@@ -600,12 +600,15 @@ static void __iomem *msix_map_region(struct pci_dev *dev,
*/
void msix_prepare_msi_desc(struct pci_dev *dev, struct msi_desc *desc)
{
+ const struct irq_domain *d = dev_get_msi_domain(&dev->dev);
+ const struct msi_domain_info *info = d->host_data;
+
desc->nvec_used = 1;
desc->pci.msi_attrib.is_msix = 1;
desc->pci.msi_attrib.is_64 = 1;
desc->pci.msi_attrib.default_irq = dev->irq;
desc->pci.mask_base = dev->msix_base;
- desc->pci.msi_attrib.can_mask = !pci_msi_ignore_mask &&
+ desc->pci.msi_attrib.can_mask = !(info->flags & MSI_FLAG_NO_MASK) &&
!desc->pci.msi_attrib.is_virtual;
if (desc->pci.msi_attrib.can_mask) {
@@ -655,9 +658,6 @@ static void msix_mask_all(void __iomem *base, int tsize)
u32 ctrl = PCI_MSIX_ENTRY_CTRL_MASKBIT;
int i;
- if (pci_msi_ignore_mask)
- return;
-
for (i = 0; i < tsize; i++, base += PCI_MSIX_ENTRY_SIZE)
writel(ctrl, base + PCI_MSIX_ENTRY_VECTOR_CTRL);
}
@@ -710,6 +710,8 @@ static int msix_setup_interrupts(struct pci_dev *dev, struct msix_entry *entries
static int msix_capability_init(struct pci_dev *dev, struct msix_entry *entries,
int nvec, struct irq_affinity *affd)
{
+ const struct irq_domain *d = dev_get_msi_domain(&dev->dev);
+ const struct msi_domain_info *info = d->host_data;
int ret, tsize;
u16 control;
@@ -740,15 +742,17 @@ static int msix_capability_init(struct pci_dev *dev, struct msix_entry *entries,
/* Disable INTX */
pci_intx_for_msi(dev, 0);
- /*
- * Ensure that all table entries are masked to prevent
- * stale entries from firing in a crash kernel.
- *
- * Done late to deal with a broken Marvell NVME device
- * which takes the MSI-X mask bits into account even
- * when MSI-X is disabled, which prevents MSI delivery.
- */
- msix_mask_all(dev->msix_base, tsize);
+ if (!(info->flags & MSI_FLAG_NO_MASK)) {
+ /*
+ * Ensure that all table entries are masked to prevent
+ * stale entries from firing in a crash kernel.
+ *
+ * Done late to deal with a broken Marvell NVME device
+ * which takes the MSI-X mask bits into account even
+ * when MSI-X is disabled, which prevents MSI delivery.
+ */
+ msix_mask_all(dev->msix_base, tsize);
+ }
pci_msix_clear_and_set_ctrl(dev, PCI_MSIX_FLAGS_MASKALL, 0);
pcibios_free_irq(dev);
diff --git a/include/linux/msi.h b/include/linux/msi.h
index b10093c4d00e..59a421fc42bf 100644
--- a/include/linux/msi.h
+++ b/include/linux/msi.h
@@ -73,7 +73,6 @@ struct msi_msg {
};
};
-extern int pci_msi_ignore_mask;
/* Helper functions */
struct msi_desc;
struct pci_dev;
@@ -556,6 +555,8 @@ enum {
MSI_FLAG_PCI_MSIX_ALLOC_DYN = (1 << 20),
/* PCI MSIs cannot be steered separately to CPU cores */
MSI_FLAG_NO_AFFINITY = (1 << 21),
+ /* Inhibit usage of entry masking */
+ MSI_FLAG_NO_MASK = (1 << 22),
};
/**
diff --git a/kernel/irq/msi.c b/kernel/irq/msi.c
index 396a067a8a56..7682c36cbccc 100644
--- a/kernel/irq/msi.c
+++ b/kernel/irq/msi.c
@@ -1143,7 +1143,7 @@ static bool msi_check_reservation_mode(struct irq_domain *domain,
if (!(info->flags & MSI_FLAG_MUST_REACTIVATE))
return false;
- if (IS_ENABLED(CONFIG_PCI_MSI) && pci_msi_ignore_mask)
+ if (info->flags & MSI_FLAG_NO_MASK)
return false;
/*
--
2.46.0
^ permalink raw reply related [flat|nested] 24+ messages in thread
* Re: [PATCH 1/3] xen/pci: do not register devices outside of PCI segment scope
2025-01-10 14:01 ` [PATCH 1/3] xen/pci: do not register devices outside of PCI segment scope Roger Pau Monne
@ 2025-01-10 22:21 ` Bjorn Helgaas
2025-01-13 7:20 ` Jan Beulich
2025-01-13 10:18 ` Roger Pau Monné
2025-01-13 7:17 ` Jan Beulich
1 sibling, 2 replies; 24+ messages in thread
From: Bjorn Helgaas @ 2025-01-10 22:21 UTC (permalink / raw)
To: Roger Pau Monne
Cc: linux-kernel, xen-devel, Juergen Gross, Stefano Stabellini,
Oleksandr Tyshchenko
On Fri, Jan 10, 2025 at 03:01:48PM +0100, Roger Pau Monne wrote:
> The PCI segment value is limited to 16 bits, however there are buses like VMD
> that fake being part of the PCI topology by adding segment with a number
> outside the scope of the PCI firmware specification range (>= 0x10000). The
> MCFG ACPI Table "PCI Segment Group Number" field is defined as having a 16 bit
> width.
>
> Attempting to register or manage those devices with Xen would result in errors
> at best, or overlaps with existing devices living on the truncated equivalent
> segment values.
The ACPI _SEG method (ACPI r6.5, sec 6.5.6) and the corresponding
value in the MCFG table (PCI Firmware r3.3, sec 4.1.2) are clearly
16-bit values.
But otherwise, the segment value is pretty much an arbitrary software
value, and the kernel works fine with the larger domain values from
vmd_find_free_domain(), so this isn't quite enough to explain what the
issue with Xen is.
Does Xen truncate the domain to 16 bits or use it to look up something
in ACPI?
> Skip notifying Xen about those devices.
>
> Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
> ---
> drivers/xen/pci.c | 19 +++++++++++++++++++
> 1 file changed, 19 insertions(+)
>
> diff --git a/drivers/xen/pci.c b/drivers/xen/pci.c
> index 416f231809cb..08e82fd1263e 100644
> --- a/drivers/xen/pci.c
> +++ b/drivers/xen/pci.c
> @@ -43,6 +43,13 @@ static int xen_add_device(struct device *dev)
> pci_mcfg_reserved = true;
> }
> #endif
> +
> + if (pci_domain_nr(pci_dev->bus) >> 16) {
> + dev_info(dev,
> + "not registering with Xen: invalid PCI segment\n");
> + return 0;
> + }
> +
> if (pci_seg_supported) {
> DEFINE_RAW_FLEX(struct physdev_pci_device_add, add, optarr, 1);
>
> @@ -149,6 +156,12 @@ static int xen_remove_device(struct device *dev)
> int r;
> struct pci_dev *pci_dev = to_pci_dev(dev);
>
> + if (pci_domain_nr(pci_dev->bus) >> 16) {
> + dev_info(dev,
> + "not unregistering with Xen: invalid PCI segment\n");
> + return 0;
> + }
> +
> if (pci_seg_supported) {
> struct physdev_pci_device device = {
> .seg = pci_domain_nr(pci_dev->bus),
> @@ -182,6 +195,12 @@ int xen_reset_device(const struct pci_dev *dev)
> .flags = PCI_DEVICE_RESET_FLR,
> };
>
> + if (pci_domain_nr(dev->bus) >> 16) {
> + dev_info(&dev->dev,
> + "unable to notify Xen of device reset: invalid PCI segment\n");
> + return 0;
> + }
> +
> return HYPERVISOR_physdev_op(PHYSDEVOP_pci_device_reset, &device);
> }
> EXPORT_SYMBOL_GPL(xen_reset_device);
> --
> 2.46.0
>
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 2/3] vmd: disable MSI remapping bypass under Xen
2025-01-10 14:01 ` [PATCH 2/3] vmd: disable MSI remapping bypass under Xen Roger Pau Monne
@ 2025-01-10 22:25 ` Bjorn Helgaas
2025-01-11 5:02 ` Jonathan Derrick
2025-01-13 10:03 ` Roger Pau Monné
2025-01-12 2:57 ` kernel test robot
1 sibling, 2 replies; 24+ messages in thread
From: Bjorn Helgaas @ 2025-01-10 22:25 UTC (permalink / raw)
To: Roger Pau Monne
Cc: linux-kernel, xen-devel, linux-pci, Nirmal Patel,
Jonathan Derrick, Lorenzo Pieralisi, Krzysztof Wilczyński,
Manivannan Sadhasivam, Rob Herring, Bjorn Helgaas
Match historical subject line style for prefix and capitalization:
PCI: vmd: Set devices to D0 before enabling PM L1 Substates
PCI: vmd: Add DID 8086:B06F and 8086:B60B for Intel client SKUs
PCI: vmd: Fix indentation issue in vmd_shutdown()
On Fri, Jan 10, 2025 at 03:01:49PM +0100, Roger Pau Monne wrote:
> MSI remapping bypass (directly configuring MSI entries for devices on the VMD
> bus) won't work under Xen, as Xen is not aware of devices in such bus, and
> hence cannot configure the entries using the pIRQ interface in the PV case, and
> in the PVH case traps won't be setup for MSI entries for such devices.
>
> Until Xen is aware of devices in the VMD bus prevent the
> VMD_FEAT_CAN_BYPASS_MSI_REMAP capability from being used when running as any
> kind of Xen guest.
Wrap to fit in 75 columns.
Can you include a hint about *why* Xen is not aware of devices below
VMD? That will help to know whether it's a permanent unfixable
situation or something that could be done eventually.
> Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
> ---
> drivers/pci/controller/vmd.c | 9 +++++++++
> 1 file changed, 9 insertions(+)
>
> diff --git a/drivers/pci/controller/vmd.c b/drivers/pci/controller/vmd.c
> index 264a180403a0..d9b7510ace29 100644
> --- a/drivers/pci/controller/vmd.c
> +++ b/drivers/pci/controller/vmd.c
> @@ -965,6 +965,15 @@ static int vmd_probe(struct pci_dev *dev, const struct pci_device_id *id)
> struct vmd_dev *vmd;
> int err;
>
> + if (xen_domain())
> + /*
> + * Xen doesn't have knowledge about devices in the VMD bus.
Also here.
> + * Bypass of MSI remapping won't work in that case as direct
> + * write to the MSI entries won't result in functional
> + * interrupts.
> + */
> + features &= ~VMD_FEAT_CAN_BYPASS_MSI_REMAP;
> +
> if (resource_size(&dev->resource[VMD_CFGBAR]) < (1 << 20))
> return -ENOMEM;
>
> --
> 2.46.0
>
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 3/3] pci/msi: remove pci_msi_ignore_mask
2025-01-10 14:01 ` [PATCH 3/3] pci/msi: remove pci_msi_ignore_mask Roger Pau Monne
@ 2025-01-10 22:30 ` Bjorn Helgaas
2025-01-13 10:25 ` Roger Pau Monné
2025-01-11 11:08 ` kernel test robot
2025-01-11 12:24 ` kernel test robot
2 siblings, 1 reply; 24+ messages in thread
From: Bjorn Helgaas @ 2025-01-10 22:30 UTC (permalink / raw)
To: Roger Pau Monne
Cc: linux-kernel, xen-devel, linux-pci, Juergen Gross, Bjorn Helgaas,
Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen, x86,
H. Peter Anvin
Match subject line style again.
On Fri, Jan 10, 2025 at 03:01:50PM +0100, Roger Pau Monne wrote:
> Setting pci_msi_ignore_mask inhibits the toggling of the mask bit for both MSI
> and MSI-X entries globally, regardless of the IRQ chip they are using. Only
> Xen sets the pci_msi_ignore_mask when routing physical interrupts over event
> channels, to prevent PCI code from attempting to toggle the maskbit, as it's
> Xen that controls the bit.
>
> However, the pci_msi_ignore_mask being global will affect devices that use MSI
> interrupts but are not routing those interrupts over event channels (not using
> the Xen pIRQ chip). One example is devices behind a VMD PCI bridge. In that
> scenario the VMD bridge configures MSI(-X) using the normal IRQ chip (the pIRQ
> one in the Xen case), and devices behind the bridge configure the MSI entries
> using indexes into the VMD bridge MSI table. The VMD bridge then demultiplexes
> such interrupts and delivers to the destination device(s). Having
> pci_msi_ignore_mask set in that scenario prevents (un)masking of MSI entries
> for devices behind the VMD bridge.
>
> Move the signaling of no entry masking into the MSI domain flags, as that
> allows setting it on a per-domain basis. Set it for the Xen MSI domain that
> uses the pIRQ chip, while leaving it unset for the rest of the cases.
>
> Remove pci_msi_ignore_mask at once, since it was only used by Xen code, and
> with Xen dropping usage the variable is unneeded.
>
> This fixes using devices behind a VMD bridge on Xen PV hardware domains.
Wrap to fit in 75 columns.
The first two patches talk about devices behind VMD not being usable
for Xen, but this one says they now work. But this doesn't undo the
code changes or comments added by the first two, so the result is a
bit confusing (probably because I know nothing about Xen).
Bjorn
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 2/3] vmd: disable MSI remapping bypass under Xen
2025-01-10 22:25 ` Bjorn Helgaas
@ 2025-01-11 5:02 ` Jonathan Derrick
2025-01-13 10:07 ` Roger Pau Monné
2025-01-13 10:03 ` Roger Pau Monné
1 sibling, 1 reply; 24+ messages in thread
From: Jonathan Derrick @ 2025-01-11 5:02 UTC (permalink / raw)
To: Bjorn Helgaas, Roger Pau Monne
Cc: linux-kernel, xen-devel, linux-pci, Nirmal Patel,
Lorenzo Pieralisi, Krzysztof Wilczyński,
Manivannan Sadhasivam, Rob Herring, Bjorn Helgaas
Hi Bjorn,
On 1/10/25 3:25 PM, Bjorn Helgaas wrote:
> Match historical subject line style for prefix and capitalization:
>
> PCI: vmd: Set devices to D0 before enabling PM L1 Substates
> PCI: vmd: Add DID 8086:B06F and 8086:B60B for Intel client SKUs
> PCI: vmd: Fix indentation issue in vmd_shutdown()
>
> On Fri, Jan 10, 2025 at 03:01:49PM +0100, Roger Pau Monne wrote:
>> MSI remapping bypass (directly configuring MSI entries for devices on the VMD
>> bus) won't work under Xen, as Xen is not aware of devices in such bus, and
>> hence cannot configure the entries using the pIRQ interface in the PV case, and
>> in the PVH case traps won't be setup for MSI entries for such devices.
>>
>> Until Xen is aware of devices in the VMD bus prevent the
>> VMD_FEAT_CAN_BYPASS_MSI_REMAP capability from being used when running as any
>> kind of Xen guest.
>
> Wrap to fit in 75 columns.
>
> Can you include a hint about *why* Xen is not aware of devices below
> VMD? That will help to know whether it's a permanent unfixable
> situation or something that could be done eventually.
>
I wasn't aware of the Xen issue with VMD but if I had to guess it's
probably due to the special handling of the downstream device into the
dmar table.
[1] 4fda230ecddc2
[2] 9b4a824b889e1
>> Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
>> ---
>> drivers/pci/controller/vmd.c | 9 +++++++++
>> 1 file changed, 9 insertions(+)
>>
>> diff --git a/drivers/pci/controller/vmd.c b/drivers/pci/controller/vmd.c
>> index 264a180403a0..d9b7510ace29 100644
>> --- a/drivers/pci/controller/vmd.c
>> +++ b/drivers/pci/controller/vmd.c
>> @@ -965,6 +965,15 @@ static int vmd_probe(struct pci_dev *dev, const struct pci_device_id *id)
>> struct vmd_dev *vmd;
>> int err;
>>
>> + if (xen_domain())
>> + /*
>> + * Xen doesn't have knowledge about devices in the VMD bus.
>
> Also here.
>
>> + * Bypass of MSI remapping won't work in that case as direct
>> + * write to the MSI entries won't result in functional
>> + * interrupts.
>> + */
>> + features &= ~VMD_FEAT_CAN_BYPASS_MSI_REMAP;
>> +
>> if (resource_size(&dev->resource[VMD_CFGBAR]) < (1 << 20))
>> return -ENOMEM;
>>
>> --
>> 2.46.0
>>
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 3/3] pci/msi: remove pci_msi_ignore_mask
2025-01-10 14:01 ` [PATCH 3/3] pci/msi: remove pci_msi_ignore_mask Roger Pau Monne
2025-01-10 22:30 ` Bjorn Helgaas
@ 2025-01-11 11:08 ` kernel test robot
2025-01-11 12:24 ` kernel test robot
2 siblings, 0 replies; 24+ messages in thread
From: kernel test robot @ 2025-01-11 11:08 UTC (permalink / raw)
To: Roger Pau Monne, linux-kernel, xen-devel, linux-pci
Cc: llvm, oe-kbuild-all, Roger Pau Monne, Juergen Gross,
Bjorn Helgaas, Thomas Gleixner, Ingo Molnar, Borislav Petkov,
Dave Hansen, x86, H. Peter Anvin
Hi Roger,
kernel test robot noticed the following build errors:
[auto build test ERROR on pci/next]
[also build test ERROR on pci/for-linus xen-tip/linux-next tip/irq/core linus/master v6.13-rc6 next-20250110]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Roger-Pau-Monne/xen-pci-do-not-register-devices-outside-of-PCI-segment-scope/20250110-220331
base: https://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git next
patch link: https://lore.kernel.org/r/20250110140152.27624-4-roger.pau%40citrix.com
patch subject: [PATCH 3/3] pci/msi: remove pci_msi_ignore_mask
config: arm64-randconfig-003-20250111 (https://download.01.org/0day-ci/archive/20250111/202501111839.HXJGe5FL-lkp@intel.com/config)
compiler: clang version 18.1.8 (https://github.com/llvm/llvm-project 3b5b5c1ec4a3095ab096dd780e84d7ab81f3d7ff)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250111/202501111839.HXJGe5FL-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202501111839.HXJGe5FL-lkp@intel.com/
All errors (new ones prefixed by >>):
>> drivers/pci/msi/msi.c:288:40: error: incomplete definition of type 'struct irq_domain'
288 | const struct msi_domain_info *info = d->host_data;
| ~^
include/linux/irq.h:130:8: note: forward declaration of 'struct irq_domain'
130 | struct irq_domain;
| ^
drivers/pci/msi/msi.c:604:40: error: incomplete definition of type 'struct irq_domain'
604 | const struct msi_domain_info *info = d->host_data;
| ~^
include/linux/irq.h:130:8: note: forward declaration of 'struct irq_domain'
130 | struct irq_domain;
| ^
drivers/pci/msi/msi.c:714:40: error: incomplete definition of type 'struct irq_domain'
714 | const struct msi_domain_info *info = d->host_data;
| ~^
include/linux/irq.h:130:8: note: forward declaration of 'struct irq_domain'
130 | struct irq_domain;
| ^
3 errors generated.
vim +288 drivers/pci/msi/msi.c
283
284 static int msi_setup_msi_desc(struct pci_dev *dev, int nvec,
285 struct irq_affinity_desc *masks)
286 {
287 const struct irq_domain *d = dev_get_msi_domain(&dev->dev);
> 288 const struct msi_domain_info *info = d->host_data;
289 struct msi_desc desc;
290 u16 control;
291
292 /* MSI Entry Initialization */
293 memset(&desc, 0, sizeof(desc));
294
295 pci_read_config_word(dev, dev->msi_cap + PCI_MSI_FLAGS, &control);
296 /* Lies, damned lies, and MSIs */
297 if (dev->dev_flags & PCI_DEV_FLAGS_HAS_MSI_MASKING)
298 control |= PCI_MSI_FLAGS_MASKBIT;
299 if (info->flags & MSI_FLAG_NO_MASK)
300 control &= ~PCI_MSI_FLAGS_MASKBIT;
301
302 desc.nvec_used = nvec;
303 desc.pci.msi_attrib.is_64 = !!(control & PCI_MSI_FLAGS_64BIT);
304 desc.pci.msi_attrib.can_mask = !!(control & PCI_MSI_FLAGS_MASKBIT);
305 desc.pci.msi_attrib.default_irq = dev->irq;
306 desc.pci.msi_attrib.multi_cap = FIELD_GET(PCI_MSI_FLAGS_QMASK, control);
307 desc.pci.msi_attrib.multiple = ilog2(__roundup_pow_of_two(nvec));
308 desc.affinity = masks;
309
310 if (control & PCI_MSI_FLAGS_64BIT)
311 desc.pci.mask_pos = dev->msi_cap + PCI_MSI_MASK_64;
312 else
313 desc.pci.mask_pos = dev->msi_cap + PCI_MSI_MASK_32;
314
315 /* Save the initial mask status */
316 if (desc.pci.msi_attrib.can_mask)
317 pci_read_config_dword(dev, desc.pci.mask_pos, &desc.pci.msi_mask);
318
319 return msi_insert_msi_desc(&dev->dev, &desc);
320 }
321
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 3/3] pci/msi: remove pci_msi_ignore_mask
2025-01-10 14:01 ` [PATCH 3/3] pci/msi: remove pci_msi_ignore_mask Roger Pau Monne
2025-01-10 22:30 ` Bjorn Helgaas
2025-01-11 11:08 ` kernel test robot
@ 2025-01-11 12:24 ` kernel test robot
2 siblings, 0 replies; 24+ messages in thread
From: kernel test robot @ 2025-01-11 12:24 UTC (permalink / raw)
To: Roger Pau Monne, linux-kernel, xen-devel, linux-pci
Cc: llvm, oe-kbuild-all, Roger Pau Monne, Juergen Gross,
Bjorn Helgaas, Thomas Gleixner, Ingo Molnar, Borislav Petkov,
Dave Hansen, x86, H. Peter Anvin
Hi Roger,
kernel test robot noticed the following build errors:
[auto build test ERROR on pci/next]
[also build test ERROR on pci/for-linus xen-tip/linux-next tip/irq/core linus/master v6.13-rc6 next-20250110]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Roger-Pau-Monne/xen-pci-do-not-register-devices-outside-of-PCI-segment-scope/20250110-220331
base: https://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git next
patch link: https://lore.kernel.org/r/20250110140152.27624-4-roger.pau%40citrix.com
patch subject: [PATCH 3/3] pci/msi: remove pci_msi_ignore_mask
config: riscv-defconfig (https://download.01.org/0day-ci/archive/20250111/202501112048.6yCFh2ma-lkp@intel.com/config)
compiler: clang version 19.1.3 (https://github.com/llvm/llvm-project ab51eccf88f5321e7c60591c5546b254b6afab99)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250111/202501112048.6yCFh2ma-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202501112048.6yCFh2ma-lkp@intel.com/
All errors (new ones prefixed by >>):
In file included from drivers/pci/msi/msi.c:12:
In file included from include/linux/irq.h:23:
In file included from arch/riscv/include/asm/irq.h:10:
In file included from include/linux/interrupt.h:22:
In file included from arch/riscv/include/asm/sections.h:9:
In file included from include/linux/mm.h:2223:
include/linux/vmstat.h:518:36: warning: arithmetic between different enumeration types ('enum node_stat_item' and 'enum lru_list') [-Wenum-enum-conversion]
518 | return node_stat_name(NR_LRU_BASE + lru) + 3; // skip "nr_"
| ~~~~~~~~~~~ ^ ~~~
>> drivers/pci/msi/msi.c:288:40: error: incomplete definition of type 'const struct irq_domain'
288 | const struct msi_domain_info *info = d->host_data;
| ~^
include/linux/irq.h:130:8: note: forward declaration of 'struct irq_domain'
130 | struct irq_domain;
| ^
drivers/pci/msi/msi.c:604:40: error: incomplete definition of type 'const struct irq_domain'
604 | const struct msi_domain_info *info = d->host_data;
| ~^
include/linux/irq.h:130:8: note: forward declaration of 'struct irq_domain'
130 | struct irq_domain;
| ^
drivers/pci/msi/msi.c:714:40: error: incomplete definition of type 'const struct irq_domain'
714 | const struct msi_domain_info *info = d->host_data;
| ~^
include/linux/irq.h:130:8: note: forward declaration of 'struct irq_domain'
130 | struct irq_domain;
| ^
1 warning and 3 errors generated.
vim +288 drivers/pci/msi/msi.c
283
284 static int msi_setup_msi_desc(struct pci_dev *dev, int nvec,
285 struct irq_affinity_desc *masks)
286 {
287 const struct irq_domain *d = dev_get_msi_domain(&dev->dev);
> 288 const struct msi_domain_info *info = d->host_data;
289 struct msi_desc desc;
290 u16 control;
291
292 /* MSI Entry Initialization */
293 memset(&desc, 0, sizeof(desc));
294
295 pci_read_config_word(dev, dev->msi_cap + PCI_MSI_FLAGS, &control);
296 /* Lies, damned lies, and MSIs */
297 if (dev->dev_flags & PCI_DEV_FLAGS_HAS_MSI_MASKING)
298 control |= PCI_MSI_FLAGS_MASKBIT;
299 if (info->flags & MSI_FLAG_NO_MASK)
300 control &= ~PCI_MSI_FLAGS_MASKBIT;
301
302 desc.nvec_used = nvec;
303 desc.pci.msi_attrib.is_64 = !!(control & PCI_MSI_FLAGS_64BIT);
304 desc.pci.msi_attrib.can_mask = !!(control & PCI_MSI_FLAGS_MASKBIT);
305 desc.pci.msi_attrib.default_irq = dev->irq;
306 desc.pci.msi_attrib.multi_cap = FIELD_GET(PCI_MSI_FLAGS_QMASK, control);
307 desc.pci.msi_attrib.multiple = ilog2(__roundup_pow_of_two(nvec));
308 desc.affinity = masks;
309
310 if (control & PCI_MSI_FLAGS_64BIT)
311 desc.pci.mask_pos = dev->msi_cap + PCI_MSI_MASK_64;
312 else
313 desc.pci.mask_pos = dev->msi_cap + PCI_MSI_MASK_32;
314
315 /* Save the initial mask status */
316 if (desc.pci.msi_attrib.can_mask)
317 pci_read_config_dword(dev, desc.pci.mask_pos, &desc.pci.msi_mask);
318
319 return msi_insert_msi_desc(&dev->dev, &desc);
320 }
321
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 2/3] vmd: disable MSI remapping bypass under Xen
2025-01-10 14:01 ` [PATCH 2/3] vmd: disable MSI remapping bypass under Xen Roger Pau Monne
2025-01-10 22:25 ` Bjorn Helgaas
@ 2025-01-12 2:57 ` kernel test robot
1 sibling, 0 replies; 24+ messages in thread
From: kernel test robot @ 2025-01-12 2:57 UTC (permalink / raw)
To: Roger Pau Monne, linux-kernel, xen-devel, linux-pci
Cc: oe-kbuild-all, Roger Pau Monne, Nirmal Patel, Jonathan Derrick,
Lorenzo Pieralisi, Krzysztof Wilczyński,
Manivannan Sadhasivam, Rob Herring, Bjorn Helgaas
Hi Roger,
kernel test robot noticed the following build errors:
[auto build test ERROR on pci/next]
[also build test ERROR on pci/for-linus tip/irq/core linus/master v6.13-rc6 next-20250110]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Roger-Pau-Monne/xen-pci-do-not-register-devices-outside-of-PCI-segment-scope/20250110-220331
base: https://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git next
patch link: https://lore.kernel.org/r/20250110140152.27624-3-roger.pau%40citrix.com
patch subject: [PATCH 2/3] vmd: disable MSI remapping bypass under Xen
config: x86_64-buildonly-randconfig-001-20250112 (https://download.01.org/0day-ci/archive/20250112/202501121029.dJk0TBPr-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250112/202501121029.dJk0TBPr-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202501121029.dJk0TBPr-lkp@intel.com/
All errors (new ones prefixed by >>):
drivers/pci/controller/vmd.c: In function 'vmd_probe':
>> drivers/pci/controller/vmd.c:973:13: error: implicit declaration of function 'xen_domain' [-Werror=implicit-function-declaration]
973 | if (xen_domain())
| ^~~~~~~~~~
cc1: some warnings being treated as errors
vim +/xen_domain +973 drivers/pci/controller/vmd.c
966
967 static int vmd_probe(struct pci_dev *dev, const struct pci_device_id *id)
968 {
969 unsigned long features = (unsigned long) id->driver_data;
970 struct vmd_dev *vmd;
971 int err;
972
> 973 if (xen_domain())
974 /*
975 * Xen doesn't have knowledge about devices in the VMD bus.
976 * Bypass of MSI remapping won't work in that case as direct
977 * write to the MSI entries won't result in functional
978 * interrupts.
979 */
980 features &= ~VMD_FEAT_CAN_BYPASS_MSI_REMAP;
981
982 if (resource_size(&dev->resource[VMD_CFGBAR]) < (1 << 20))
983 return -ENOMEM;
984
985 vmd = devm_kzalloc(&dev->dev, sizeof(*vmd), GFP_KERNEL);
986 if (!vmd)
987 return -ENOMEM;
988
989 vmd->dev = dev;
990 vmd->instance = ida_alloc(&vmd_instance_ida, GFP_KERNEL);
991 if (vmd->instance < 0)
992 return vmd->instance;
993
994 vmd->name = devm_kasprintf(&dev->dev, GFP_KERNEL, "vmd%d",
995 vmd->instance);
996 if (!vmd->name) {
997 err = -ENOMEM;
998 goto out_release_instance;
999 }
1000
1001 err = pcim_enable_device(dev);
1002 if (err < 0)
1003 goto out_release_instance;
1004
1005 vmd->cfgbar = pcim_iomap(dev, VMD_CFGBAR, 0);
1006 if (!vmd->cfgbar) {
1007 err = -ENOMEM;
1008 goto out_release_instance;
1009 }
1010
1011 pci_set_master(dev);
1012 if (dma_set_mask_and_coherent(&dev->dev, DMA_BIT_MASK(64)) &&
1013 dma_set_mask_and_coherent(&dev->dev, DMA_BIT_MASK(32))) {
1014 err = -ENODEV;
1015 goto out_release_instance;
1016 }
1017
1018 if (features & VMD_FEAT_OFFSET_FIRST_VECTOR)
1019 vmd->first_vec = 1;
1020
1021 spin_lock_init(&vmd->cfg_lock);
1022 pci_set_drvdata(dev, vmd);
1023 err = vmd_enable_domain(vmd, features);
1024 if (err)
1025 goto out_release_instance;
1026
1027 dev_info(&vmd->dev->dev, "Bound to PCI domain %04x\n",
1028 vmd->sysdata.domain);
1029 return 0;
1030
1031 out_release_instance:
1032 ida_free(&vmd_instance_ida, vmd->instance);
1033 return err;
1034 }
1035
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 1/3] xen/pci: do not register devices outside of PCI segment scope
2025-01-10 14:01 ` [PATCH 1/3] xen/pci: do not register devices outside of PCI segment scope Roger Pau Monne
2025-01-10 22:21 ` Bjorn Helgaas
@ 2025-01-13 7:17 ` Jan Beulich
2025-01-13 10:13 ` Roger Pau Monné
1 sibling, 1 reply; 24+ messages in thread
From: Jan Beulich @ 2025-01-13 7:17 UTC (permalink / raw)
To: Roger Pau Monne
Cc: Juergen Gross, Stefano Stabellini, Oleksandr Tyshchenko,
linux-kernel, xen-devel
On 10.01.2025 15:01, Roger Pau Monne wrote:
> The PCI segment value is limited to 16 bits, however there are buses like VMD
> that fake being part of the PCI topology by adding segment with a number
> outside the scope of the PCI firmware specification range (>= 0x10000). The
> MCFG ACPI Table "PCI Segment Group Number" field is defined as having a 16 bit
> width.
>
> Attempting to register or manage those devices with Xen would result in errors
> at best, or overlaps with existing devices living on the truncated equivalent
> segment values.
>
> Skip notifying Xen about those devices.
Hmm, is simply omitting the notification really all it takes? How would Xen
manage MSI / MSI-X, for example, without knowing of the device? As per the
BoF on the summit in Prague(?), I continue to think we need partial driver
logic in Xen for VMD ...
Jan
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 1/3] xen/pci: do not register devices outside of PCI segment scope
2025-01-10 22:21 ` Bjorn Helgaas
@ 2025-01-13 7:20 ` Jan Beulich
2025-01-13 10:18 ` Roger Pau Monné
1 sibling, 0 replies; 24+ messages in thread
From: Jan Beulich @ 2025-01-13 7:20 UTC (permalink / raw)
To: Bjorn Helgaas
Cc: linux-kernel, xen-devel, Juergen Gross, Stefano Stabellini,
Oleksandr Tyshchenko, Roger Pau Monne
On 10.01.2025 23:21, Bjorn Helgaas wrote:
> On Fri, Jan 10, 2025 at 03:01:48PM +0100, Roger Pau Monne wrote:
>> The PCI segment value is limited to 16 bits, however there are buses like VMD
>> that fake being part of the PCI topology by adding segment with a number
>> outside the scope of the PCI firmware specification range (>= 0x10000). The
>> MCFG ACPI Table "PCI Segment Group Number" field is defined as having a 16 bit
>> width.
>>
>> Attempting to register or manage those devices with Xen would result in errors
>> at best, or overlaps with existing devices living on the truncated equivalent
>> segment values.
>
> The ACPI _SEG method (ACPI r6.5, sec 6.5.6) and the corresponding
> value in the MCFG table (PCI Firmware r3.3, sec 4.1.2) are clearly
> 16-bit values.
>
> But otherwise, the segment value is pretty much an arbitrary software
> value, and the kernel works fine with the larger domain values from
> vmd_find_free_domain(), so this isn't quite enough to explain what the
> issue with Xen is.
>
> Does Xen truncate the domain to 16 bits or use it to look up something
> in ACPI?
One of the involved public interface structs starts like this:
struct physdev_pci_device_add {
/* IN */
uint16_t seg;
uint8_t bus;
uint8_t devfn;
...
So yes, wider segment values would be truncated. Plus, even if they weren't,
there would need to be coordination between Dom0 and Xen on which devices
gets which segment number, since - as you say - the assignment in Linux is
pretty much arbitrary.
Jan
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 2/3] vmd: disable MSI remapping bypass under Xen
2025-01-10 22:25 ` Bjorn Helgaas
2025-01-11 5:02 ` Jonathan Derrick
@ 2025-01-13 10:03 ` Roger Pau Monné
2025-01-13 15:11 ` Keith Busch
1 sibling, 1 reply; 24+ messages in thread
From: Roger Pau Monné @ 2025-01-13 10:03 UTC (permalink / raw)
To: Bjorn Helgaas
Cc: linux-kernel, xen-devel, linux-pci, Nirmal Patel,
Jonathan Derrick, Lorenzo Pieralisi, Krzysztof Wilczyński,
Manivannan Sadhasivam, Rob Herring, Bjorn Helgaas
On Fri, Jan 10, 2025 at 04:25:25PM -0600, Bjorn Helgaas wrote:
> Match historical subject line style for prefix and capitalization:
>
> PCI: vmd: Set devices to D0 before enabling PM L1 Substates
> PCI: vmd: Add DID 8086:B06F and 8086:B60B for Intel client SKUs
> PCI: vmd: Fix indentation issue in vmd_shutdown()
>
> On Fri, Jan 10, 2025 at 03:01:49PM +0100, Roger Pau Monne wrote:
> > MSI remapping bypass (directly configuring MSI entries for devices on the VMD
> > bus) won't work under Xen, as Xen is not aware of devices in such bus, and
> > hence cannot configure the entries using the pIRQ interface in the PV case, and
> > in the PVH case traps won't be setup for MSI entries for such devices.
> >
> > Until Xen is aware of devices in the VMD bus prevent the
> > VMD_FEAT_CAN_BYPASS_MSI_REMAP capability from being used when running as any
> > kind of Xen guest.
>
> Wrap to fit in 75 columns.
Hm, OK, but isn't the limit 80 columns according to the kernel coding
style (Documentation/process/coding-style.rst)?
I don't mind adjusting, but if you are going to ask every submitter to
limit to 75 columns then the coding style document should be updated
to reflect that.
> Can you include a hint about *why* Xen is not aware of devices below
> VMD? That will help to know whether it's a permanent unfixable
> situation or something that could be done eventually.
Xen would need to be made aware of the devices exposed behind the VMD
bridge, so it can manage them. For example Xen is the entity that
controls the local APICs, and hence interrupts must be configured by
Xen. Xen needs knowledge about the devices behind the VMD bridge,
and how to access those devices PCI config space to at least configure
MSI or MSI-X capabilities. It could possibly be exposed similarly to
how Xen currently deals with ECAM areas.
None of this is present at the moment, could always be added later and
Linux be made aware that the limitation no longer applies. That would
require changes in both Xen and Linux to propagate the VMD information
into Xen.
> > Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
> > ---
> > drivers/pci/controller/vmd.c | 9 +++++++++
> > 1 file changed, 9 insertions(+)
> >
> > diff --git a/drivers/pci/controller/vmd.c b/drivers/pci/controller/vmd.c
> > index 264a180403a0..d9b7510ace29 100644
> > --- a/drivers/pci/controller/vmd.c
> > +++ b/drivers/pci/controller/vmd.c
> > @@ -965,6 +965,15 @@ static int vmd_probe(struct pci_dev *dev, const struct pci_device_id *id)
> > struct vmd_dev *vmd;
> > int err;
> >
> > + if (xen_domain())
> > + /*
> > + * Xen doesn't have knowledge about devices in the VMD bus.
>
> Also here.
Would you be OK with something like:
"Xen doesn't have knowledge about devices in the VMD bus because the
config space of devices behind the VMD bridge is not known to Xen, and
hence Xen cannot discover or configure them in any way.
Bypass of MSI remapping won't work in that case as direct write by
Linux to the MSI entries won't result in functional interrupts, as
it's Xen the entity that manages the local APIC and must configure
interrupts."
Thanks, Roger.
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 2/3] vmd: disable MSI remapping bypass under Xen
2025-01-11 5:02 ` Jonathan Derrick
@ 2025-01-13 10:07 ` Roger Pau Monné
0 siblings, 0 replies; 24+ messages in thread
From: Roger Pau Monné @ 2025-01-13 10:07 UTC (permalink / raw)
To: Jonathan Derrick
Cc: Bjorn Helgaas, linux-kernel, xen-devel, linux-pci, Nirmal Patel,
Lorenzo Pieralisi, Krzysztof Wilczyński,
Manivannan Sadhasivam, Rob Herring, Bjorn Helgaas
On Fri, Jan 10, 2025 at 10:02:00PM -0700, Jonathan Derrick wrote:
> Hi Bjorn,
>
> On 1/10/25 3:25 PM, Bjorn Helgaas wrote:
> > Match historical subject line style for prefix and capitalization:
> >
> > PCI: vmd: Set devices to D0 before enabling PM L1 Substates
> > PCI: vmd: Add DID 8086:B06F and 8086:B60B for Intel client SKUs
> > PCI: vmd: Fix indentation issue in vmd_shutdown()
> >
> > On Fri, Jan 10, 2025 at 03:01:49PM +0100, Roger Pau Monne wrote:
> > > MSI remapping bypass (directly configuring MSI entries for devices on the VMD
> > > bus) won't work under Xen, as Xen is not aware of devices in such bus, and
> > > hence cannot configure the entries using the pIRQ interface in the PV case, and
> > > in the PVH case traps won't be setup for MSI entries for such devices.
> > >
> > > Until Xen is aware of devices in the VMD bus prevent the
> > > VMD_FEAT_CAN_BYPASS_MSI_REMAP capability from being used when running as any
> > > kind of Xen guest.
> >
> > Wrap to fit in 75 columns.
> >
> > Can you include a hint about *why* Xen is not aware of devices below
> > VMD? That will help to know whether it's a permanent unfixable
> > situation or something that could be done eventually.
> >
> I wasn't aware of the Xen issue with VMD but if I had to guess it's probably
> due to the special handling of the downstream device into the dmar table.
Nothing to do with DMAR or IOMMUs, it's just that on a Xen system it
must be Xen the one that configures the MSI entries, and that requires
Xen being aware of the VMD devices and it's MSI or MSI-X
capabilities.
None of this is currently done, as Xen has no visibility at all of
devices behind a VMD bridge because is doesn't even know about VMD
bridges, neither about the exposed ECAM-like region on those
devices.
Thanks, Roger.
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 1/3] xen/pci: do not register devices outside of PCI segment scope
2025-01-13 7:17 ` Jan Beulich
@ 2025-01-13 10:13 ` Roger Pau Monné
0 siblings, 0 replies; 24+ messages in thread
From: Roger Pau Monné @ 2025-01-13 10:13 UTC (permalink / raw)
To: Jan Beulich
Cc: Juergen Gross, Stefano Stabellini, Oleksandr Tyshchenko,
linux-kernel, xen-devel
On Mon, Jan 13, 2025 at 08:17:23AM +0100, Jan Beulich wrote:
> On 10.01.2025 15:01, Roger Pau Monne wrote:
> > The PCI segment value is limited to 16 bits, however there are buses like VMD
> > that fake being part of the PCI topology by adding segment with a number
> > outside the scope of the PCI firmware specification range (>= 0x10000). The
> > MCFG ACPI Table "PCI Segment Group Number" field is defined as having a 16 bit
> > width.
> >
> > Attempting to register or manage those devices with Xen would result in errors
> > at best, or overlaps with existing devices living on the truncated equivalent
> > segment values.
> >
> > Skip notifying Xen about those devices.
>
> Hmm, is simply omitting the notification really all it takes? How would Xen
> manage MSI / MSI-X, for example, without knowing of the device? As per the
> BoF on the summit in Prague(?), I continue to think we need partial driver
> logic in Xen for VMD ...
The basic mode of operation of devices behind a VMD bridge is to
reference the interrupts of the bridge device in its MSI(-X) entries,
so the VMD bridge acts as a de-multiplexer and forwards the interrupts
to the device behind the VMD bridge. See vmd_alloc_irqs() (and
calling context) in the VMD driver for a reference about how this is
setup and operates. Note also that devices behind a VMD bridge
operate using a different MSI domain, that uses a custom
irq_compose_msi_msg hook.
Thanks, Roger.
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 1/3] xen/pci: do not register devices outside of PCI segment scope
2025-01-10 22:21 ` Bjorn Helgaas
2025-01-13 7:20 ` Jan Beulich
@ 2025-01-13 10:18 ` Roger Pau Monné
2025-01-13 23:29 ` Bjorn Helgaas
1 sibling, 1 reply; 24+ messages in thread
From: Roger Pau Monné @ 2025-01-13 10:18 UTC (permalink / raw)
To: Bjorn Helgaas
Cc: linux-kernel, xen-devel, Juergen Gross, Stefano Stabellini,
Oleksandr Tyshchenko
On Fri, Jan 10, 2025 at 04:21:29PM -0600, Bjorn Helgaas wrote:
> On Fri, Jan 10, 2025 at 03:01:48PM +0100, Roger Pau Monne wrote:
> > The PCI segment value is limited to 16 bits, however there are buses like VMD
> > that fake being part of the PCI topology by adding segment with a number
> > outside the scope of the PCI firmware specification range (>= 0x10000). The
> > MCFG ACPI Table "PCI Segment Group Number" field is defined as having a 16 bit
> > width.
> >
> > Attempting to register or manage those devices with Xen would result in errors
> > at best, or overlaps with existing devices living on the truncated equivalent
> > segment values.
>
> The ACPI _SEG method (ACPI r6.5, sec 6.5.6) and the corresponding
> value in the MCFG table (PCI Firmware r3.3, sec 4.1.2) are clearly
> 16-bit values.
>
> But otherwise, the segment value is pretty much an arbitrary software
> value, and the kernel works fine with the larger domain values from
> vmd_find_free_domain(), so this isn't quite enough to explain what the
> issue with Xen is.
>
> Does Xen truncate the domain to 16 bits or use it to look up something
> in ACPI?
In the interface between Xen and Linux the segment field is 16 bit
width, so with the current interface is not possible to reference
devices that are past the 0xffff segment.
I also wonder whether Xen and Linux (or guest OSes in general) would
agree on how to reference such devices. AFAICT VMD segment numbers
are purely a software construct, but not something enforced by the
specification. Could for example FreeBSD assign a different segment
to VMD devices?
If so we would need some kind of specification about how VMD segment
values are assigned so that OSes have a coherent way of referencing
VMD devices without ambiguity.
Thanks, Roger.
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 3/3] pci/msi: remove pci_msi_ignore_mask
2025-01-10 22:30 ` Bjorn Helgaas
@ 2025-01-13 10:25 ` Roger Pau Monné
2025-01-13 23:32 ` Bjorn Helgaas
0 siblings, 1 reply; 24+ messages in thread
From: Roger Pau Monné @ 2025-01-13 10:25 UTC (permalink / raw)
To: Bjorn Helgaas
Cc: linux-kernel, xen-devel, linux-pci, Juergen Gross, Bjorn Helgaas,
Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen, x86,
H. Peter Anvin
On Fri, Jan 10, 2025 at 04:30:57PM -0600, Bjorn Helgaas wrote:
> Match subject line style again.
>
> On Fri, Jan 10, 2025 at 03:01:50PM +0100, Roger Pau Monne wrote:
> > Setting pci_msi_ignore_mask inhibits the toggling of the mask bit for both MSI
> > and MSI-X entries globally, regardless of the IRQ chip they are using. Only
> > Xen sets the pci_msi_ignore_mask when routing physical interrupts over event
> > channels, to prevent PCI code from attempting to toggle the maskbit, as it's
> > Xen that controls the bit.
> >
> > However, the pci_msi_ignore_mask being global will affect devices that use MSI
> > interrupts but are not routing those interrupts over event channels (not using
> > the Xen pIRQ chip). One example is devices behind a VMD PCI bridge. In that
> > scenario the VMD bridge configures MSI(-X) using the normal IRQ chip (the pIRQ
> > one in the Xen case), and devices behind the bridge configure the MSI entries
> > using indexes into the VMD bridge MSI table. The VMD bridge then demultiplexes
> > such interrupts and delivers to the destination device(s). Having
> > pci_msi_ignore_mask set in that scenario prevents (un)masking of MSI entries
> > for devices behind the VMD bridge.
> >
> > Move the signaling of no entry masking into the MSI domain flags, as that
> > allows setting it on a per-domain basis. Set it for the Xen MSI domain that
> > uses the pIRQ chip, while leaving it unset for the rest of the cases.
> >
> > Remove pci_msi_ignore_mask at once, since it was only used by Xen code, and
> > with Xen dropping usage the variable is unneeded.
> >
> > This fixes using devices behind a VMD bridge on Xen PV hardware domains.
>
> Wrap to fit in 75 columns.
>
> The first two patches talk about devices behind VMD not being usable
> for Xen, but this one says they now work.
Sorry, let me try to clarify:
Devices behind a VMD bridge are not known to Xen, however that doesn't
mean Linux cannot use them. That's what this series achieves. By
inhibiting the usage of VMD_FEAT_CAN_BYPASS_MSI_REMAP and the removal
of the pci_msi_ignore_mask bodge devices behind a VMD bridge do work
fine when use from a Linux Xen hardware domain. That's the whole
point of the series.
> But this doesn't undo the
> code changes or comments added by the first two, so the result is a
> bit confusing (probably because I know nothing about Xen).
All patches are needed. There's probably some confusion about devices
behind a VMD bridge not being known by Xen vs not being usable by
Linux running under Xen as a hardware domain.
With all three patches applied devices behind a VMD bridge work under
Linux with Xen.
Thanks, Roger.
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 2/3] vmd: disable MSI remapping bypass under Xen
2025-01-13 10:03 ` Roger Pau Monné
@ 2025-01-13 15:11 ` Keith Busch
2025-01-13 16:45 ` Roger Pau Monné
0 siblings, 1 reply; 24+ messages in thread
From: Keith Busch @ 2025-01-13 15:11 UTC (permalink / raw)
To: Roger Pau Monné
Cc: Bjorn Helgaas, linux-kernel, xen-devel, linux-pci, Nirmal Patel,
Jonathan Derrick, Lorenzo Pieralisi, Krzysztof Wilczy´nski,
Manivannan Sadhasivam, Rob Herring, Bjorn Helgaas
On Mon, Jan 13, 2025 at 11:03:58AM +0100, Roger Pau Monné wrote:
>
> Hm, OK, but isn't the limit 80 columns according to the kernel coding
> style (Documentation/process/coding-style.rst)?
That's the coding style. The commit message style is described in a
different doc:
https://docs.kernel.org/process/submitting-patches.html#the-canonical-patch-format
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 2/3] vmd: disable MSI remapping bypass under Xen
2025-01-13 15:11 ` Keith Busch
@ 2025-01-13 16:45 ` Roger Pau Monné
2025-01-13 16:53 ` Keith Busch
0 siblings, 1 reply; 24+ messages in thread
From: Roger Pau Monné @ 2025-01-13 16:45 UTC (permalink / raw)
To: Keith Busch
Cc: Bjorn Helgaas, linux-kernel, xen-devel, linux-pci, Nirmal Patel,
Jonathan Derrick, Lorenzo Pieralisi, Krzysztof Wilczy´nski,
Manivannan Sadhasivam, Rob Herring, Bjorn Helgaas
On Mon, Jan 13, 2025 at 08:11:19AM -0700, Keith Busch wrote:
> On Mon, Jan 13, 2025 at 11:03:58AM +0100, Roger Pau Monné wrote:
> >
> > Hm, OK, but isn't the limit 80 columns according to the kernel coding
> > style (Documentation/process/coding-style.rst)?
>
> That's the coding style. The commit message style is described in a
> different doc:
>
> https://docs.kernel.org/process/submitting-patches.html#the-canonical-patch-format
It's quite confusing to have different line length for code vs commit
messages, but my fault for not reading those. Will adjust to 75
columns them.
Regards, Roger.
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 2/3] vmd: disable MSI remapping bypass under Xen
2025-01-13 16:45 ` Roger Pau Monné
@ 2025-01-13 16:53 ` Keith Busch
2025-01-14 11:03 ` Roger Pau Monné
0 siblings, 1 reply; 24+ messages in thread
From: Keith Busch @ 2025-01-13 16:53 UTC (permalink / raw)
To: Roger Pau Monné
Cc: Bjorn Helgaas, linux-kernel, xen-devel, linux-pci, Nirmal Patel,
Jonathan Derrick, Lorenzo Pieralisi, Krzysztof Wilczy´nski,
Manivannan Sadhasivam, Rob Herring, Bjorn Helgaas
On Mon, Jan 13, 2025 at 05:45:20PM +0100, Roger Pau Monné wrote:
> On Mon, Jan 13, 2025 at 08:11:19AM -0700, Keith Busch wrote:
> > On Mon, Jan 13, 2025 at 11:03:58AM +0100, Roger Pau Monné wrote:
> > >
> > > Hm, OK, but isn't the limit 80 columns according to the kernel coding
> > > style (Documentation/process/coding-style.rst)?
> >
> > That's the coding style. The commit message style is described in a
> > different doc:
> >
> > https://docs.kernel.org/process/submitting-patches.html#the-canonical-patch-format
>
> It's quite confusing to have different line length for code vs commit
> messages, but my fault for not reading those. Will adjust to 75
> columns them.
The output of 'git log' prepends spaces to the subject and body of the
listed commits. The lower limit for commit messages vs. code makes the
change log look readable in an 80-char terminal.
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 1/3] xen/pci: do not register devices outside of PCI segment scope
2025-01-13 10:18 ` Roger Pau Monné
@ 2025-01-13 23:29 ` Bjorn Helgaas
0 siblings, 0 replies; 24+ messages in thread
From: Bjorn Helgaas @ 2025-01-13 23:29 UTC (permalink / raw)
To: Roger Pau Monné
Cc: linux-kernel, xen-devel, Juergen Gross, Stefano Stabellini,
Oleksandr Tyshchenko
On Mon, Jan 13, 2025 at 11:18:57AM +0100, Roger Pau Monné wrote:
> On Fri, Jan 10, 2025 at 04:21:29PM -0600, Bjorn Helgaas wrote:
> > On Fri, Jan 10, 2025 at 03:01:48PM +0100, Roger Pau Monne wrote:
> > > The PCI segment value is limited to 16 bits, however there are buses like VMD
> > > that fake being part of the PCI topology by adding segment with a number
> > > outside the scope of the PCI firmware specification range (>= 0x10000). The
> > > MCFG ACPI Table "PCI Segment Group Number" field is defined as having a 16 bit
> > > width.
> > >
> > > Attempting to register or manage those devices with Xen would result in errors
> > > at best, or overlaps with existing devices living on the truncated equivalent
> > > segment values.
> >
> > The ACPI _SEG method (ACPI r6.5, sec 6.5.6) and the corresponding
> > value in the MCFG table (PCI Firmware r3.3, sec 4.1.2) are clearly
> > 16-bit values.
> >
> > But otherwise, the segment value is pretty much an arbitrary software
> > value, and the kernel works fine with the larger domain values from
> > vmd_find_free_domain(), so this isn't quite enough to explain what the
> > issue with Xen is.
> >
> > Does Xen truncate the domain to 16 bits or use it to look up something
> > in ACPI?
>
> In the interface between Xen and Linux the segment field is 16 bit
> width, so with the current interface is not possible to reference
> devices that are past the 0xffff segment.
I think this specific reason (and maybe even struct
physdev_pci_device_add) would be more useful than the ACPI _SEG and
MCFG things, which are not as directly connected here.
Bjorn
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 3/3] pci/msi: remove pci_msi_ignore_mask
2025-01-13 10:25 ` Roger Pau Monné
@ 2025-01-13 23:32 ` Bjorn Helgaas
0 siblings, 0 replies; 24+ messages in thread
From: Bjorn Helgaas @ 2025-01-13 23:32 UTC (permalink / raw)
To: Roger Pau Monné
Cc: linux-kernel, xen-devel, linux-pci, Juergen Gross, Bjorn Helgaas,
Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen, x86,
H. Peter Anvin
On Mon, Jan 13, 2025 at 11:25:58AM +0100, Roger Pau Monné wrote:
> On Fri, Jan 10, 2025 at 04:30:57PM -0600, Bjorn Helgaas wrote:
> > On Fri, Jan 10, 2025 at 03:01:50PM +0100, Roger Pau Monne wrote:
> > > Setting pci_msi_ignore_mask inhibits the toggling of the mask bit for both MSI
> > > and MSI-X entries globally, regardless of the IRQ chip they are using. Only
> > > Xen sets the pci_msi_ignore_mask when routing physical interrupts over event
> > > channels, to prevent PCI code from attempting to toggle the maskbit, as it's
> > > Xen that controls the bit.
> > >
> > > However, the pci_msi_ignore_mask being global will affect devices that use MSI
> > > interrupts but are not routing those interrupts over event channels (not using
> > > the Xen pIRQ chip). One example is devices behind a VMD PCI bridge. In that
> > > scenario the VMD bridge configures MSI(-X) using the normal IRQ chip (the pIRQ
> > > one in the Xen case), and devices behind the bridge configure the MSI entries
> > > using indexes into the VMD bridge MSI table. The VMD bridge then demultiplexes
> > > such interrupts and delivers to the destination device(s). Having
> > > pci_msi_ignore_mask set in that scenario prevents (un)masking of MSI entries
> > > for devices behind the VMD bridge.
> > >
> > > Move the signaling of no entry masking into the MSI domain flags, as that
> > > allows setting it on a per-domain basis. Set it for the Xen MSI domain that
> > > uses the pIRQ chip, while leaving it unset for the rest of the cases.
> > >
> > > Remove pci_msi_ignore_mask at once, since it was only used by Xen code, and
> > > with Xen dropping usage the variable is unneeded.
> > >
> > > This fixes using devices behind a VMD bridge on Xen PV hardware domains.
> >
> > Wrap to fit in 75 columns.
> >
> > The first two patches talk about devices behind VMD not being usable
> > for Xen, but this one says they now work.
>
> Sorry, let me try to clarify:
>
> Devices behind a VMD bridge are not known to Xen, however that doesn't
> mean Linux cannot use them. That's what this series achieves. By
> inhibiting the usage of VMD_FEAT_CAN_BYPASS_MSI_REMAP and the removal
> of the pci_msi_ignore_mask bodge devices behind a VMD bridge do work
> fine when use from a Linux Xen hardware domain. That's the whole
> point of the series.
>
> > But this doesn't undo the
> > code changes or comments added by the first two, so the result is a
> > bit confusing (probably because I know nothing about Xen).
>
> All patches are needed. There's probably some confusion about devices
> behind a VMD bridge not being known by Xen vs not being usable by
> Linux running under Xen as a hardware domain.
>
> With all three patches applied devices behind a VMD bridge work under
> Linux with Xen.
There's certainly confusion in *my* mind because I don't know enough
about Xen to understand the subtlety about devices behind VMD not
being known by Xen but still being usable by Linux running under Xen.
Bjorn
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 2/3] vmd: disable MSI remapping bypass under Xen
2025-01-13 16:53 ` Keith Busch
@ 2025-01-14 11:03 ` Roger Pau Monné
0 siblings, 0 replies; 24+ messages in thread
From: Roger Pau Monné @ 2025-01-14 11:03 UTC (permalink / raw)
To: Keith Busch
Cc: Bjorn Helgaas, linux-kernel, xen-devel, linux-pci, Nirmal Patel,
Jonathan Derrick, Lorenzo Pieralisi, Krzysztof Wilczy´nski,
Manivannan Sadhasivam, Rob Herring, Bjorn Helgaas
On Mon, Jan 13, 2025 at 09:53:21AM -0700, Keith Busch wrote:
> On Mon, Jan 13, 2025 at 05:45:20PM +0100, Roger Pau Monné wrote:
> > On Mon, Jan 13, 2025 at 08:11:19AM -0700, Keith Busch wrote:
> > > On Mon, Jan 13, 2025 at 11:03:58AM +0100, Roger Pau Monné wrote:
> > > >
> > > > Hm, OK, but isn't the limit 80 columns according to the kernel coding
> > > > style (Documentation/process/coding-style.rst)?
> > >
> > > That's the coding style. The commit message style is described in a
> > > different doc:
> > >
> > > https://docs.kernel.org/process/submitting-patches.html#the-canonical-patch-format
> >
> > It's quite confusing to have different line length for code vs commit
> > messages, but my fault for not reading those. Will adjust to 75
> > columns them.
>
> The output of 'git log' prepends spaces to the subject and body of the
> listed commits. The lower limit for commit messages vs. code makes the
> change log look readable in an 80-char terminal.
Oh, I see, thanks for explaining.
The 80 column limit for code mean the resulting diff (and `git log`
output) could have a maximum width of 81 characters (because of the
prepended +,-, ), but since Linux uses hard tabs for indentation this
is not really an issue as it would be if using spaces.
Regards, Roger.
^ permalink raw reply [flat|nested] 24+ messages in thread
end of thread, other threads:[~2025-01-14 11:03 UTC | newest]
Thread overview: 24+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-01-10 14:01 [PATCH 0/3] xen: fix usage of devices behind a VMD bridge Roger Pau Monne
2025-01-10 14:01 ` [PATCH 1/3] xen/pci: do not register devices outside of PCI segment scope Roger Pau Monne
2025-01-10 22:21 ` Bjorn Helgaas
2025-01-13 7:20 ` Jan Beulich
2025-01-13 10:18 ` Roger Pau Monné
2025-01-13 23:29 ` Bjorn Helgaas
2025-01-13 7:17 ` Jan Beulich
2025-01-13 10:13 ` Roger Pau Monné
2025-01-10 14:01 ` [PATCH 2/3] vmd: disable MSI remapping bypass under Xen Roger Pau Monne
2025-01-10 22:25 ` Bjorn Helgaas
2025-01-11 5:02 ` Jonathan Derrick
2025-01-13 10:07 ` Roger Pau Monné
2025-01-13 10:03 ` Roger Pau Monné
2025-01-13 15:11 ` Keith Busch
2025-01-13 16:45 ` Roger Pau Monné
2025-01-13 16:53 ` Keith Busch
2025-01-14 11:03 ` Roger Pau Monné
2025-01-12 2:57 ` kernel test robot
2025-01-10 14:01 ` [PATCH 3/3] pci/msi: remove pci_msi_ignore_mask Roger Pau Monne
2025-01-10 22:30 ` Bjorn Helgaas
2025-01-13 10:25 ` Roger Pau Monné
2025-01-13 23:32 ` Bjorn Helgaas
2025-01-11 11:08 ` kernel test robot
2025-01-11 12:24 ` kernel test robot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox