x86/msi: Extend per-domain/device warning mechanism

The arch_msix struct had a single "warned" field with a domid for which
warning was issued. Upcoming patch will need similar mechanism for few
more warnings, so change it to save a bit field of issued warnings.

Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
Marek Marczykowski-Górecki authored and Andrew Cooper committed 2024-05-11 00:13:43 +01:00
1 parent 5cc7347b04
commit e9607d4061
2 files changed
+18 -5

No files matched your search

+17 -1
View File
@@ -208,6 +208,16 @@ struct msg_address {
PCI_MSIX_ENTRY_SIZE + \
(~PCI_MSIX_BIRMASK & (PAGE_SIZE - 1)))
#define MSIX_CHECK_WARN(msix, domid, which) \
({ \
if ( (msix)->warned_domid != (domid) ) \
{ \
(msix)->warned_domid = (domid); \
(msix)->warned_kind.all = 0; \
} \
(msix)->warned_kind.which ? false : ((msix)->warned_kind.which = true); \
})
struct arch_msix {
unsigned int nr_entries, used_entries;
struct {
@@ -217,7 +227,13 @@ struct arch_msix {
int table_idx[MAX_MSIX_TABLE_PAGES];
spinlock_t table_lock;
bool host_maskall, guest_maskall;
domid_t warned;
domid_t warned_domid;
union {
uint8_t all;
struct {
bool maskall : 1;
};
} warned_kind;
};
void early_msi_init(void);
+1 -4
View File
@@ -364,13 +364,10 @@ static bool msi_set_mask_bit(struct irq_desc *desc, bool host, bool guest)
domid_t domid = pdev->domain->domain_id;
maskall = true;
if ( pdev->msix->warned != domid )
{
pdev->msix->warned = domid;
if ( MSIX_CHECK_WARN(pdev->msix, domid, maskall) )
printk(XENLOG_G_WARNING
"cannot mask IRQ %d: masking MSI-X on Dom%d's %pp\n",
desc->irq, domid, &pdev->sbdf);
}
}
pdev->msix->host_maskall = maskall;
if ( maskall || pdev->msix->guest_maskall )
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.