Hi, Looking through source and diff of sys/dev/em/if_em.c I have noticed that _at__at_ -275,7 +275,7 _at__at_ static void em_add_int_delay_sysctl(stru static poll_handler_t em_poll; static void em_intr(void *); #else -static void em_intr_fast(void *); +static int em_intr_fast(void *); static void em_add_int_process_limit(struct adapter *, const char *, const char *, int *, int); static void em_handle_rxtx(void *context, int pending); _at__at_ -1307,7 +1307,7 _at__at_ em_handle_rxtx(void *context, int pendin * Fast Interrupt Service routine * *********************************************************************/ -static void +static int em_intr_fast(void *arg) { struct adapter *adapter = arg; _at__at_ -2173,8 +2174,8 _at__at_ em_allocate_intr(struct adapter *adapter #ifdef DEVICE_POLLING if (adapter->int_handler_tag == NULL && (error = bus_setup_intr(dev, - adapter->res_interrupt, INTR_TYPE_NET | INTR_MPSAFE, em_intr, adapter, - &adapter->int_handler_tag)) != 0) { + adapter->res_interrupt, INTR_TYPE_NET | INTR_MPSAFE, NULL, em_intr, + adapter, &adapter->int_handler_tag)) != 0) { device_printf(dev, "Failed to register interrupt handler"); return (error); } between revision 1.168 and 1.169 that causes panic. I have switched em_intr_fast to be static void and order in bus_setup_intr is incorrect. It should be: if ((error = bus_setup_intr(dev, adapter->res_interrupt, INTR_TYPE_NET,NULL, em_intr_fast, adapter, &adapter->int_handler_tag)) != 0) { not if ((error = bus_setup_intr(dev, adapter->res_interrupt, INTR_TYPE_NET, em_intr_fast,NULL adapter, &adapter->int_handler_tag)) != 0) { which causes panic when: /boot/loader contains: hw.pci.enable_msi=0 hw.pci.enable_msix=0 Btw. I'm using this since msi=1 cases watchdog timeouts with em0. Regards, gg.Received on Tue Feb 27 2007 - 12:32:56 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:06 UTC