mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
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:
1 parent
5cc7347b04
commit
e9607d4061
2 files changed
+18
-5
No files matched your search
@@ -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
@@ -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 )
|
||||
|
||||