mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-05 11:01:06 -04:00
net: ravb: Simplify poll & receive functions
We don't need to pass the work budget to ravb_rx() by reference, it's cleaner to pass this by value and return the amount of work done. This allows us to simplify the ravb_poll() function and use the common `work_done` variable name seen in other network drivers for consistency and ease of understanding. This is a pure refactor and should not affect behaviour. Signed-off-by: Paul Barker <paul.barker.ct@bp.renesas.com> Reviewed-by: Sergey Shtylyov <s.shtylyov@omp.ru> Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
@@ -1039,7 +1039,7 @@ struct ravb_ptp {
|
||||
};
|
||||
|
||||
struct ravb_hw_info {
|
||||
bool (*receive)(struct net_device *ndev, int *quota, int q);
|
||||
int (*receive)(struct net_device *ndev, int budget, int q);
|
||||
void (*set_rate)(struct net_device *ndev);
|
||||
int (*set_feature)(struct net_device *ndev, netdev_features_t features);
|
||||
int (*dmac_init)(struct net_device *ndev);
|
||||
|
||||
@@ -759,7 +759,7 @@ static struct sk_buff *ravb_get_skb_gbeth(struct net_device *ndev, int entry,
|
||||
}
|
||||
|
||||
/* Packet receive function for Gigabit Ethernet */
|
||||
static bool ravb_rx_gbeth(struct net_device *ndev, int *quota, int q)
|
||||
static int ravb_rx_gbeth(struct net_device *ndev, int budget, int q)
|
||||
{
|
||||
struct ravb_private *priv = netdev_priv(ndev);
|
||||
const struct ravb_hw_info *info = priv->info;
|
||||
@@ -781,7 +781,7 @@ static bool ravb_rx_gbeth(struct net_device *ndev, int *quota, int q)
|
||||
for (i = 0; i < limit; i++, priv->cur_rx[q]++) {
|
||||
entry = priv->cur_rx[q] % priv->num_rx_ring[q];
|
||||
desc = &priv->rx_ring[q].desc[entry];
|
||||
if (rx_packets == *quota || desc->die_dt == DT_FEMPTY)
|
||||
if (rx_packets == budget || desc->die_dt == DT_FEMPTY)
|
||||
break;
|
||||
|
||||
/* Descriptor type must be checked before all other reads */
|
||||
@@ -882,12 +882,11 @@ static bool ravb_rx_gbeth(struct net_device *ndev, int *quota, int q)
|
||||
}
|
||||
|
||||
stats->rx_packets += rx_packets;
|
||||
*quota -= rx_packets;
|
||||
return *quota == 0;
|
||||
return rx_packets;
|
||||
}
|
||||
|
||||
/* Packet receive function for Ethernet AVB */
|
||||
static bool ravb_rx_rcar(struct net_device *ndev, int *quota, int q)
|
||||
static int ravb_rx_rcar(struct net_device *ndev, int budget, int q)
|
||||
{
|
||||
struct ravb_private *priv = netdev_priv(ndev);
|
||||
const struct ravb_hw_info *info = priv->info;
|
||||
@@ -906,7 +905,7 @@ static bool ravb_rx_rcar(struct net_device *ndev, int *quota, int q)
|
||||
for (i = 0; i < limit; i++, priv->cur_rx[q]++) {
|
||||
entry = priv->cur_rx[q] % priv->num_rx_ring[q];
|
||||
desc = &priv->rx_ring[q].ex_desc[entry];
|
||||
if (rx_packets == *quota || desc->die_dt == DT_FEMPTY)
|
||||
if (rx_packets == budget || desc->die_dt == DT_FEMPTY)
|
||||
break;
|
||||
|
||||
/* Descriptor type must be checked before all other reads */
|
||||
@@ -992,17 +991,16 @@ static bool ravb_rx_rcar(struct net_device *ndev, int *quota, int q)
|
||||
}
|
||||
|
||||
stats->rx_packets += rx_packets;
|
||||
*quota -= rx_packets;
|
||||
return *quota == 0;
|
||||
return rx_packets;
|
||||
}
|
||||
|
||||
/* Packet receive function for Ethernet AVB */
|
||||
static bool ravb_rx(struct net_device *ndev, int *quota, int q)
|
||||
static int ravb_rx(struct net_device *ndev, int budget, int q)
|
||||
{
|
||||
struct ravb_private *priv = netdev_priv(ndev);
|
||||
const struct ravb_hw_info *info = priv->info;
|
||||
|
||||
return info->receive(ndev, quota, q);
|
||||
return info->receive(ndev, budget, q);
|
||||
}
|
||||
|
||||
static void ravb_rcv_snd_disable(struct net_device *ndev)
|
||||
@@ -1319,13 +1317,12 @@ static int ravb_poll(struct napi_struct *napi, int budget)
|
||||
unsigned long flags;
|
||||
int q = napi - priv->napi;
|
||||
int mask = BIT(q);
|
||||
int quota = budget;
|
||||
bool unmask;
|
||||
int work_done;
|
||||
|
||||
/* Processing RX Descriptor Ring */
|
||||
/* Clear RX interrupt */
|
||||
ravb_write(ndev, ~(mask | RIS0_RESERVED), RIS0);
|
||||
unmask = !ravb_rx(ndev, "a, q);
|
||||
work_done = ravb_rx(ndev, budget, q);
|
||||
|
||||
/* Processing TX Descriptor Ring */
|
||||
spin_lock_irqsave(&priv->lock, flags);
|
||||
@@ -1344,7 +1341,7 @@ static int ravb_poll(struct napi_struct *napi, int budget)
|
||||
if (priv->rx_fifo_errors != ndev->stats.rx_fifo_errors)
|
||||
ndev->stats.rx_fifo_errors = priv->rx_fifo_errors;
|
||||
|
||||
if (!unmask)
|
||||
if (work_done == budget)
|
||||
goto out;
|
||||
|
||||
napi_complete(napi);
|
||||
@@ -1361,7 +1358,7 @@ static int ravb_poll(struct napi_struct *napi, int budget)
|
||||
spin_unlock_irqrestore(&priv->lock, flags);
|
||||
|
||||
out:
|
||||
return budget - quota;
|
||||
return work_done;
|
||||
}
|
||||
|
||||
static void ravb_set_duplex_gbeth(struct net_device *ndev)
|
||||
|
||||
Reference in New Issue
Block a user