diff options
author | Ben Hutchings <bhutchings@solarflare.com> | 2012-02-28 18:37:35 -0500 |
---|---|---|
committer | Ben Hutchings <bhutchings@solarflare.com> | 2012-03-06 13:14:15 -0500 |
commit | eee6f6a9e0c83811de77a137989d4a3289e297cc (patch) | |
tree | 88f5a56b976c0c26177eeaf2b0f115e9153b92d1 /drivers/net/ethernet/sfc/selftest.c | |
parent | ed74f48087d1b1cf7cf534dad03bf1584eee783d (diff) |
sfc: Encapsulate access to efx_{channel,nic}::last_irq_cpu in self-test
Cleanup in preparation for doing an event test on ifup.
Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
Diffstat (limited to 'drivers/net/ethernet/sfc/selftest.c')
-rw-r--r-- | drivers/net/ethernet/sfc/selftest.c | 14 |
1 files changed, 4 insertions, 10 deletions
diff --git a/drivers/net/ethernet/sfc/selftest.c b/drivers/net/ethernet/sfc/selftest.c index e4b4c8a3abc6..aa4ab53cac57 100644 --- a/drivers/net/ethernet/sfc/selftest.c +++ b/drivers/net/ethernet/sfc/selftest.c | |||
@@ -149,11 +149,7 @@ static int efx_test_interrupts(struct efx_nic *efx, | |||
149 | netif_dbg(efx, drv, efx->net_dev, "testing interrupts\n"); | 149 | netif_dbg(efx, drv, efx->net_dev, "testing interrupts\n"); |
150 | tests->interrupt = -1; | 150 | tests->interrupt = -1; |
151 | 151 | ||
152 | /* Reset interrupt flag */ | 152 | efx_nic_irq_test_start(efx); |
153 | efx->last_irq_cpu = -1; | ||
154 | smp_wmb(); | ||
155 | |||
156 | efx_nic_generate_interrupt(efx); | ||
157 | timeout = jiffies + IRQ_TIMEOUT; | 153 | timeout = jiffies + IRQ_TIMEOUT; |
158 | wait = 1; | 154 | wait = 1; |
159 | 155 | ||
@@ -161,7 +157,7 @@ static int efx_test_interrupts(struct efx_nic *efx, | |||
161 | netif_dbg(efx, drv, efx->net_dev, "waiting for test interrupt\n"); | 157 | netif_dbg(efx, drv, efx->net_dev, "waiting for test interrupt\n"); |
162 | do { | 158 | do { |
163 | schedule_timeout_uninterruptible(wait); | 159 | schedule_timeout_uninterruptible(wait); |
164 | cpu = ACCESS_ONCE(efx->last_irq_cpu); | 160 | cpu = efx_nic_irq_test_irq_cpu(efx); |
165 | if (cpu >= 0) | 161 | if (cpu >= 0) |
166 | goto success; | 162 | goto success; |
167 | wait *= 2; | 163 | wait *= 2; |
@@ -192,9 +188,7 @@ static int efx_test_eventq_irq(struct efx_nic *efx, | |||
192 | read_ptr[channel->channel] = channel->eventq_read_ptr; | 188 | read_ptr[channel->channel] = channel->eventq_read_ptr; |
193 | set_bit(channel->channel, &dma_pend); | 189 | set_bit(channel->channel, &dma_pend); |
194 | set_bit(channel->channel, &int_pend); | 190 | set_bit(channel->channel, &int_pend); |
195 | channel->last_irq_cpu = -1; | 191 | efx_nic_event_test_start(channel); |
196 | smp_wmb(); | ||
197 | efx_nic_generate_test_event(channel); | ||
198 | } | 192 | } |
199 | 193 | ||
200 | timeout = jiffies + IRQ_TIMEOUT; | 194 | timeout = jiffies + IRQ_TIMEOUT; |
@@ -216,7 +210,7 @@ static int efx_test_eventq_irq(struct efx_nic *efx, | |||
216 | } else { | 210 | } else { |
217 | if (efx_nic_event_present(channel)) | 211 | if (efx_nic_event_present(channel)) |
218 | clear_bit(channel->channel, &dma_pend); | 212 | clear_bit(channel->channel, &dma_pend); |
219 | if (ACCESS_ONCE(channel->last_irq_cpu) >= 0) | 213 | if (efx_nic_event_test_irq_cpu(channel) >= 0) |
220 | clear_bit(channel->channel, &int_pend); | 214 | clear_bit(channel->channel, &int_pend); |
221 | } | 215 | } |
222 | napi_enable(&channel->napi_str); | 216 | napi_enable(&channel->napi_str); |