e1000e: Remove pending interrupt flags
They are duplicate of running throttling timer flags and incomplete as the flags are not cleared when the interrupts are fired or the device is reset. Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com> Signed-off-by: Jason Wang <jasowang@redhat.com>
This commit is contained in:
parent
a7539f9d74
commit
31e3f318c8
@ -631,12 +631,11 @@ static const VMStateDescription e1000e_vmstate = {
|
|||||||
VMSTATE_E1000E_INTR_DELAY_TIMER(core.tidv, E1000EState),
|
VMSTATE_E1000E_INTR_DELAY_TIMER(core.tidv, E1000EState),
|
||||||
|
|
||||||
VMSTATE_E1000E_INTR_DELAY_TIMER(core.itr, E1000EState),
|
VMSTATE_E1000E_INTR_DELAY_TIMER(core.itr, E1000EState),
|
||||||
VMSTATE_BOOL(core.itr_intr_pending, E1000EState),
|
VMSTATE_UNUSED(1),
|
||||||
|
|
||||||
VMSTATE_E1000E_INTR_DELAY_TIMER_ARRAY(core.eitr, E1000EState,
|
VMSTATE_E1000E_INTR_DELAY_TIMER_ARRAY(core.eitr, E1000EState,
|
||||||
E1000E_MSIX_VEC_NUM),
|
E1000E_MSIX_VEC_NUM),
|
||||||
VMSTATE_BOOL_ARRAY(core.eitr_intr_pending, E1000EState,
|
VMSTATE_UNUSED(E1000E_MSIX_VEC_NUM),
|
||||||
E1000E_MSIX_VEC_NUM),
|
|
||||||
|
|
||||||
VMSTATE_UINT32(core.itr_guest_value, E1000EState),
|
VMSTATE_UINT32(core.itr_guest_value, E1000EState),
|
||||||
VMSTATE_UINT32_ARRAY(core.eitr_guest_value, E1000EState,
|
VMSTATE_UINT32_ARRAY(core.eitr_guest_value, E1000EState,
|
||||||
|
@ -154,11 +154,6 @@ e1000e_intrmgr_on_throttling_timer(void *opaque)
|
|||||||
|
|
||||||
timer->running = false;
|
timer->running = false;
|
||||||
|
|
||||||
if (!timer->core->itr_intr_pending) {
|
|
||||||
trace_e1000e_irq_throttling_no_pending_interrupts();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (msi_enabled(timer->core->owner)) {
|
if (msi_enabled(timer->core->owner)) {
|
||||||
trace_e1000e_irq_msi_notify_postponed();
|
trace_e1000e_irq_msi_notify_postponed();
|
||||||
/* Clear msi_causes_pending to fire MSI eventually */
|
/* Clear msi_causes_pending to fire MSI eventually */
|
||||||
@ -180,11 +175,6 @@ e1000e_intrmgr_on_msix_throttling_timer(void *opaque)
|
|||||||
|
|
||||||
timer->running = false;
|
timer->running = false;
|
||||||
|
|
||||||
if (!timer->core->eitr_intr_pending[idx]) {
|
|
||||||
trace_e1000e_irq_throttling_no_pending_vec(idx);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
trace_e1000e_irq_msix_notify_postponed_vec(idx);
|
trace_e1000e_irq_msix_notify_postponed_vec(idx);
|
||||||
msix_notify(timer->core->owner, idx);
|
msix_notify(timer->core->owner, idx);
|
||||||
}
|
}
|
||||||
@ -2015,13 +2005,11 @@ e1000e_clear_ims_bits(E1000ECore *core, uint32_t bits)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static inline bool
|
static inline bool
|
||||||
e1000e_postpone_interrupt(bool *interrupt_pending,
|
e1000e_postpone_interrupt(E1000IntrDelayTimer *timer)
|
||||||
E1000IntrDelayTimer *timer)
|
|
||||||
{
|
{
|
||||||
if (timer->running) {
|
if (timer->running) {
|
||||||
trace_e1000e_irq_postponed_by_xitr(timer->delay_reg << 2);
|
trace_e1000e_irq_postponed_by_xitr(timer->delay_reg << 2);
|
||||||
|
|
||||||
*interrupt_pending = true;
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2035,14 +2023,13 @@ e1000e_postpone_interrupt(bool *interrupt_pending,
|
|||||||
static inline bool
|
static inline bool
|
||||||
e1000e_itr_should_postpone(E1000ECore *core)
|
e1000e_itr_should_postpone(E1000ECore *core)
|
||||||
{
|
{
|
||||||
return e1000e_postpone_interrupt(&core->itr_intr_pending, &core->itr);
|
return e1000e_postpone_interrupt(&core->itr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline bool
|
static inline bool
|
||||||
e1000e_eitr_should_postpone(E1000ECore *core, int idx)
|
e1000e_eitr_should_postpone(E1000ECore *core, int idx)
|
||||||
{
|
{
|
||||||
return e1000e_postpone_interrupt(&core->eitr_intr_pending[idx],
|
return e1000e_postpone_interrupt(&core->eitr[idx]);
|
||||||
&core->eitr[idx]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -95,10 +95,8 @@ struct E1000Core {
|
|||||||
E1000IntrDelayTimer tidv;
|
E1000IntrDelayTimer tidv;
|
||||||
|
|
||||||
E1000IntrDelayTimer itr;
|
E1000IntrDelayTimer itr;
|
||||||
bool itr_intr_pending;
|
|
||||||
|
|
||||||
E1000IntrDelayTimer eitr[E1000E_MSIX_VEC_NUM];
|
E1000IntrDelayTimer eitr[E1000E_MSIX_VEC_NUM];
|
||||||
bool eitr_intr_pending[E1000E_MSIX_VEC_NUM];
|
|
||||||
|
|
||||||
VMChangeStateEntry *vmstate;
|
VMChangeStateEntry *vmstate;
|
||||||
|
|
||||||
|
@ -201,10 +201,8 @@ e1000e_rx_metadata_ipv6_filtering_disabled(void) "IPv6 RX filtering disabled by
|
|||||||
e1000e_vlan_vet(uint16_t vet) "Setting VLAN ethernet type 0x%X"
|
e1000e_vlan_vet(uint16_t vet) "Setting VLAN ethernet type 0x%X"
|
||||||
|
|
||||||
e1000e_irq_msi_notify(uint32_t cause) "MSI notify 0x%x"
|
e1000e_irq_msi_notify(uint32_t cause) "MSI notify 0x%x"
|
||||||
e1000e_irq_throttling_no_pending_interrupts(void) "No pending interrupts to notify"
|
|
||||||
e1000e_irq_msi_notify_postponed(void) "Sending MSI postponed by ITR"
|
e1000e_irq_msi_notify_postponed(void) "Sending MSI postponed by ITR"
|
||||||
e1000e_irq_legacy_notify_postponed(void) "Raising legacy IRQ postponed by ITR"
|
e1000e_irq_legacy_notify_postponed(void) "Raising legacy IRQ postponed by ITR"
|
||||||
e1000e_irq_throttling_no_pending_vec(int idx) "No pending interrupts for vector %d"
|
|
||||||
e1000e_irq_msix_notify_postponed_vec(int idx) "Sending MSI-X postponed by EITR[%d]"
|
e1000e_irq_msix_notify_postponed_vec(int idx) "Sending MSI-X postponed by EITR[%d]"
|
||||||
e1000e_irq_legacy_notify(bool level) "IRQ line state: %d"
|
e1000e_irq_legacy_notify(bool level) "IRQ line state: %d"
|
||||||
e1000e_irq_msix_notify_vec(uint32_t vector) "MSI-X notify vector 0x%x"
|
e1000e_irq_msix_notify_vec(uint32_t vector) "MSI-X notify vector 0x%x"
|
||||||
|
Loading…
Reference in New Issue
Block a user