Loading drivers/net/ethernet/sfc/mcdi.c +17 −6 Original line number Diff line number Diff line Loading @@ -50,6 +50,7 @@ struct efx_mcdi_async_param { static void efx_mcdi_timeout_async(unsigned long context); static int efx_mcdi_drv_attach(struct efx_nic *efx, bool driver_operating, bool *was_attached_out); static bool efx_mcdi_poll_once(struct efx_nic *efx); static inline struct efx_mcdi_iface *efx_mcdi(struct efx_nic *efx) { Loading Loading @@ -237,6 +238,21 @@ static void efx_mcdi_read_response_header(struct efx_nic *efx) } } static bool efx_mcdi_poll_once(struct efx_nic *efx) { struct efx_mcdi_iface *mcdi = efx_mcdi(efx); rmb(); if (!efx->type->mcdi_poll_response(efx)) return false; spin_lock_bh(&mcdi->iface_lock); efx_mcdi_read_response_header(efx); spin_unlock_bh(&mcdi->iface_lock); return true; } static int efx_mcdi_poll(struct efx_nic *efx) { struct efx_mcdi_iface *mcdi = efx_mcdi(efx); Loading Loading @@ -272,18 +288,13 @@ static int efx_mcdi_poll(struct efx_nic *efx) time = jiffies; rmb(); if (efx->type->mcdi_poll_response(efx)) if (efx_mcdi_poll_once(efx)) break; if (time_after(time, finish)) return -ETIMEDOUT; } spin_lock_bh(&mcdi->iface_lock); efx_mcdi_read_response_header(efx); spin_unlock_bh(&mcdi->iface_lock); /* Return rc=0 like wait_event_timeout() */ return 0; } Loading Loading
drivers/net/ethernet/sfc/mcdi.c +17 −6 Original line number Diff line number Diff line Loading @@ -50,6 +50,7 @@ struct efx_mcdi_async_param { static void efx_mcdi_timeout_async(unsigned long context); static int efx_mcdi_drv_attach(struct efx_nic *efx, bool driver_operating, bool *was_attached_out); static bool efx_mcdi_poll_once(struct efx_nic *efx); static inline struct efx_mcdi_iface *efx_mcdi(struct efx_nic *efx) { Loading Loading @@ -237,6 +238,21 @@ static void efx_mcdi_read_response_header(struct efx_nic *efx) } } static bool efx_mcdi_poll_once(struct efx_nic *efx) { struct efx_mcdi_iface *mcdi = efx_mcdi(efx); rmb(); if (!efx->type->mcdi_poll_response(efx)) return false; spin_lock_bh(&mcdi->iface_lock); efx_mcdi_read_response_header(efx); spin_unlock_bh(&mcdi->iface_lock); return true; } static int efx_mcdi_poll(struct efx_nic *efx) { struct efx_mcdi_iface *mcdi = efx_mcdi(efx); Loading Loading @@ -272,18 +288,13 @@ static int efx_mcdi_poll(struct efx_nic *efx) time = jiffies; rmb(); if (efx->type->mcdi_poll_response(efx)) if (efx_mcdi_poll_once(efx)) break; if (time_after(time, finish)) return -ETIMEDOUT; } spin_lock_bh(&mcdi->iface_lock); efx_mcdi_read_response_header(efx); spin_unlock_bh(&mcdi->iface_lock); /* Return rc=0 like wait_event_timeout() */ return 0; } Loading