@@ -631,7 +631,6 @@ struct rtl8169_tc_offsets {
631631
632632enum rtl_flag {
633633 RTL_FLAG_TASK_ENABLED = 0 ,
634- RTL_FLAG_TASK_SLOW_PENDING ,
635634 RTL_FLAG_TASK_RESET_PENDING ,
636635 RTL_FLAG_MAX
637636};
@@ -6452,42 +6451,29 @@ static irqreturn_t rtl8169_interrupt(int irq, void *dev_instance)
64526451 if (status == 0xffff || !(status & (RTL_EVENT_NAPI | tp -> event_slow )))
64536452 return IRQ_NONE ;
64546453
6455- rtl_irq_disable (tp );
6456- napi_schedule_irqoff (& tp -> napi );
6457-
6458- return IRQ_HANDLED ;
6459- }
6460-
6461- /*
6462- * Workqueue context.
6463- */
6464- static void rtl_slow_event_work (struct rtl8169_private * tp )
6465- {
6466- struct net_device * dev = tp -> dev ;
6467- u16 status ;
6454+ if (unlikely (status & SYSErr )) {
6455+ rtl8169_pcierr_interrupt (tp -> dev );
6456+ goto out ;
6457+ }
64686458
6469- status = rtl_get_events ( tp ) & tp -> event_slow ;
6470- rtl_ack_events (tp , status );
6459+ if ( status & LinkChg )
6460+ phy_mac_interrupt (tp -> dev -> phydev );
64716461
6472- if (unlikely (status & RxFIFOOver )) {
6473- switch (tp -> mac_version ) {
6474- /* Work around for rx fifo overflow */
6475- case RTL_GIGA_MAC_VER_11 :
6476- netif_stop_queue (dev );
6477- /* XXX - Hack alert. See rtl_task(). */
6478- set_bit (RTL_FLAG_TASK_RESET_PENDING , tp -> wk .flags );
6479- default :
6480- break ;
6481- }
6462+ if (unlikely (status & RxFIFOOver &&
6463+ tp -> mac_version == RTL_GIGA_MAC_VER_11 )) {
6464+ netif_stop_queue (tp -> dev );
6465+ /* XXX - Hack alert. See rtl_task(). */
6466+ set_bit (RTL_FLAG_TASK_RESET_PENDING , tp -> wk .flags );
64826467 }
64836468
6484- if (unlikely (status & SYSErr ))
6485- rtl8169_pcierr_interrupt (dev );
6486-
6487- if (status & LinkChg )
6488- phy_mac_interrupt (dev -> phydev );
6469+ if (status & RTL_EVENT_NAPI ) {
6470+ rtl_irq_disable (tp );
6471+ napi_schedule_irqoff (& tp -> napi );
6472+ }
6473+ out :
6474+ rtl_ack_events (tp , status );
64896475
6490- rtl_irq_enable_all ( tp ) ;
6476+ return IRQ_HANDLED ;
64916477}
64926478
64936479static void rtl_task (struct work_struct * work )
@@ -6496,8 +6482,6 @@ static void rtl_task(struct work_struct *work)
64966482 int bitnr ;
64976483 void (* action )(struct rtl8169_private * );
64986484 } rtl_work [] = {
6499- /* XXX - keep rtl_slow_event_work() as first element. */
6500- { RTL_FLAG_TASK_SLOW_PENDING , rtl_slow_event_work },
65016485 { RTL_FLAG_TASK_RESET_PENDING , rtl_reset_work },
65026486 };
65036487 struct rtl8169_private * tp =
@@ -6527,27 +6511,16 @@ static int rtl8169_poll(struct napi_struct *napi, int budget)
65276511{
65286512 struct rtl8169_private * tp = container_of (napi , struct rtl8169_private , napi );
65296513 struct net_device * dev = tp -> dev ;
6530- u16 enable_mask = RTL_EVENT_NAPI | tp -> event_slow ;
65316514 int work_done ;
6532- u16 status ;
6533-
6534- status = rtl_get_events (tp );
6535- rtl_ack_events (tp , status & ~tp -> event_slow );
65366515
65376516 work_done = rtl_rx (dev , tp , (u32 ) budget );
65386517
65396518 rtl_tx (dev , tp );
65406519
6541- if (status & tp -> event_slow ) {
6542- enable_mask &= ~tp -> event_slow ;
6543-
6544- rtl_schedule_task (tp , RTL_FLAG_TASK_SLOW_PENDING );
6545- }
6546-
65476520 if (work_done < budget ) {
65486521 napi_complete_done (napi , work_done );
65496522
6550- rtl_irq_enable (tp , enable_mask );
6523+ rtl_irq_enable_all (tp );
65516524 mmiowb ();
65526525 }
65536526
0 commit comments