projects
/
deliverable
/
linux.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[NET]: Make NAPI polling independent of struct net_device objects.
[deliverable/linux.git]
/
drivers
/
net
/
cassini.c
diff --git
a/drivers/net/cassini.c
b/drivers/net/cassini.c
index f6e4030c73d118c043ca7daebfdc051ef78320f3..13f14df21e6e080d4934f8d54e5f8dab00e48b2c 100644
(file)
--- a/
drivers/net/cassini.c
+++ b/
drivers/net/cassini.c
@@
-2485,7
+2485,7
@@
static irqreturn_t cas_interruptN(int irq, void *dev_id)
if (status & INTR_RX_DONE_ALT) { /* handle rx separately */
#ifdef USE_NAPI
cas_mask_intr(cp);
if (status & INTR_RX_DONE_ALT) { /* handle rx separately */
#ifdef USE_NAPI
cas_mask_intr(cp);
- netif_rx_schedule(dev);
+ netif_rx_schedule(dev
, &cp->napi
);
#else
cas_rx_ringN(cp, ring, 0);
#endif
#else
cas_rx_ringN(cp, ring, 0);
#endif
@@
-2536,7
+2536,7
@@
static irqreturn_t cas_interrupt1(int irq, void *dev_id)
if (status & INTR_RX_DONE_ALT) { /* handle rx separately */
#ifdef USE_NAPI
cas_mask_intr(cp);
if (status & INTR_RX_DONE_ALT) { /* handle rx separately */
#ifdef USE_NAPI
cas_mask_intr(cp);
- netif_rx_schedule(dev);
+ netif_rx_schedule(dev
, &cp->napi
);
#else
cas_rx_ringN(cp, 1, 0);
#endif
#else
cas_rx_ringN(cp, 1, 0);
#endif
@@
-2592,7
+2592,7
@@
static irqreturn_t cas_interrupt(int irq, void *dev_id)
if (status & INTR_RX_DONE) {
#ifdef USE_NAPI
cas_mask_intr(cp);
if (status & INTR_RX_DONE) {
#ifdef USE_NAPI
cas_mask_intr(cp);
- netif_rx_schedule(dev);
+ netif_rx_schedule(dev
, &cp->napi
);
#else
cas_rx_ringN(cp, 0, 0);
#endif
#else
cas_rx_ringN(cp, 0, 0);
#endif
@@
-2607,9
+2607,10
@@
static irqreturn_t cas_interrupt(int irq, void *dev_id)
#ifdef USE_NAPI
#ifdef USE_NAPI
-static int cas_poll(struct n
et_device *dev, int *
budget)
+static int cas_poll(struct n
api_struct *napi, int
budget)
{
{
- struct cas *cp = netdev_priv(dev);
+ struct cas *cp = container_of(napi, struct cas, napi);
+ struct net_device *dev = cp->dev;
int i, enable_intr, todo, credits;
u32 status = readl(cp->regs + REG_INTR_STATUS);
unsigned long flags;
int i, enable_intr, todo, credits;
u32 status = readl(cp->regs + REG_INTR_STATUS);
unsigned long flags;
@@
-2620,20
+2621,18
@@
static int cas_poll(struct net_device *dev, int *budget)
/* NAPI rx packets. we spread the credits across all of the
* rxc rings
/* NAPI rx packets. we spread the credits across all of the
* rxc rings
- */
- todo = min(*budget, dev->quota);
-
- /* to make sure we're fair with the work we loop through each
+ *
+ * to make sure we're fair with the work we loop through each
* ring N_RX_COMP_RING times with a request of
* ring N_RX_COMP_RING times with a request of
- *
todo
/ N_RX_COMP_RINGS
+ *
budget
/ N_RX_COMP_RINGS
*/
enable_intr = 1;
credits = 0;
for (i = 0; i < N_RX_COMP_RINGS; i++) {
int j;
for (j = 0; j < N_RX_COMP_RINGS; j++) {
*/
enable_intr = 1;
credits = 0;
for (i = 0; i < N_RX_COMP_RINGS; i++) {
int j;
for (j = 0; j < N_RX_COMP_RINGS; j++) {
- credits += cas_rx_ringN(cp, j,
todo
/ N_RX_COMP_RINGS);
- if (credits >=
todo
) {
+ credits += cas_rx_ringN(cp, j,
budget
/ N_RX_COMP_RINGS);
+ if (credits >=
budget
) {
enable_intr = 0;
goto rx_comp;
}
enable_intr = 0;
goto rx_comp;
}
@@
-2641,9
+2640,6
@@
static int cas_poll(struct net_device *dev, int *budget)
}
rx_comp:
}
rx_comp:
- *budget -= credits;
- dev->quota -= credits;
-
/* final rx completion */
spin_lock_irqsave(&cp->lock, flags);
if (status)
/* final rx completion */
spin_lock_irqsave(&cp->lock, flags);
if (status)
@@
-2674,11
+2670,10
@@
rx_comp:
#endif
spin_unlock_irqrestore(&cp->lock, flags);
if (enable_intr) {
#endif
spin_unlock_irqrestore(&cp->lock, flags);
if (enable_intr) {
- netif_rx_complete(dev);
+ netif_rx_complete(dev
, napi
);
cas_unmask_intr(cp);
cas_unmask_intr(cp);
- return 0;
}
}
- return
1
;
+ return
credits
;
}
#endif
}
#endif
@@
-4351,6
+4346,9
@@
static int cas_open(struct net_device *dev)
goto err_spare;
}
goto err_spare;
}
+#ifdef USE_NAPI
+ napi_enable(&cp->napi);
+#endif
/* init hw */
cas_lock_all_save(cp, flags);
cas_clean_rings(cp);
/* init hw */
cas_lock_all_save(cp, flags);
cas_clean_rings(cp);
@@
-4376,6
+4374,9
@@
static int cas_close(struct net_device *dev)
unsigned long flags;
struct cas *cp = netdev_priv(dev);
unsigned long flags;
struct cas *cp = netdev_priv(dev);
+#ifdef USE_NAPI
+ napi_enable(&cp->napi);
+#endif
/* Make sure we don't get distracted by suspend/resume */
mutex_lock(&cp->pm_mutex);
/* Make sure we don't get distracted by suspend/resume */
mutex_lock(&cp->pm_mutex);
@@
-5062,8
+5063,7
@@
static int __devinit cas_init_one(struct pci_dev *pdev,
dev->watchdog_timeo = CAS_TX_TIMEOUT;
dev->change_mtu = cas_change_mtu;
#ifdef USE_NAPI
dev->watchdog_timeo = CAS_TX_TIMEOUT;
dev->change_mtu = cas_change_mtu;
#ifdef USE_NAPI
- dev->poll = cas_poll;
- dev->weight = 64;
+ netif_napi_add(dev, &cp->napi, cas_poll, 64);
#endif
#ifdef CONFIG_NET_POLL_CONTROLLER
dev->poll_controller = cas_netpoll;
#endif
#ifdef CONFIG_NET_POLL_CONTROLLER
dev->poll_controller = cas_netpoll;
This page took
0.033034 seconds
and
5
git commands to generate.