Skip to content

Commit 16c2e4d

Browse files
committed
Merge branch 'DPAA-Ethernet-fixes'
Madalin Bucur says: ==================== DPAA Ethernet fixes This patch set is addressing several issues in the DPAA Ethernet driver suite: - module unload crash caused by wrong reference to device being left in the cleanup code after the DSA related changes - scheduling wile atomic bug in QMan code revealed during dpaa_eth module unload - a couple of error counter fixes, a duplicated init in dpaa_eth. ==================== Signed-off-by: David S. Miller <[email protected]>
2 parents 4dcb31d + 82d141c commit 16c2e4d

File tree

2 files changed

+9
-27
lines changed

2 files changed

+9
-27
lines changed

drivers/net/ethernet/freescale/dpaa/dpaa_eth.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2008,7 +2008,6 @@ static inline int dpaa_xmit(struct dpaa_priv *priv,
20082008
}
20092009

20102010
if (unlikely(err < 0)) {
2011-
percpu_stats->tx_errors++;
20122011
percpu_stats->tx_fifo_errors++;
20132012
return err;
20142013
}
@@ -2278,7 +2277,6 @@ static enum qman_cb_dqrr_result rx_default_dqrr(struct qman_portal *portal,
22782277
vaddr = phys_to_virt(addr);
22792278
prefetch(vaddr + qm_fd_get_offset(fd));
22802279

2281-
fd_format = qm_fd_get_format(fd);
22822280
/* The only FD types that we may receive are contig and S/G */
22832281
WARN_ON((fd_format != qm_fd_contig) && (fd_format != qm_fd_sg));
22842282

@@ -2311,8 +2309,10 @@ static enum qman_cb_dqrr_result rx_default_dqrr(struct qman_portal *portal,
23112309

23122310
skb_len = skb->len;
23132311

2314-
if (unlikely(netif_receive_skb(skb) == NET_RX_DROP))
2312+
if (unlikely(netif_receive_skb(skb) == NET_RX_DROP)) {
2313+
percpu_stats->rx_dropped++;
23152314
return qman_cb_dqrr_consume;
2315+
}
23162316

23172317
percpu_stats->rx_packets++;
23182318
percpu_stats->rx_bytes += skb_len;
@@ -2860,7 +2860,7 @@ static int dpaa_remove(struct platform_device *pdev)
28602860
struct device *dev;
28612861
int err;
28622862

2863-
dev = &pdev->dev;
2863+
dev = pdev->dev.parent;
28642864
net_dev = dev_get_drvdata(dev);
28652865

28662866
priv = netdev_priv(net_dev);

drivers/soc/fsl/qbman/qman.c

Lines changed: 5 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2443,39 +2443,21 @@ struct cgr_comp {
24432443
struct completion completion;
24442444
};
24452445

2446-
static int qman_delete_cgr_thread(void *p)
2446+
static void qman_delete_cgr_smp_call(void *p)
24472447
{
2448-
struct cgr_comp *cgr_comp = (struct cgr_comp *)p;
2449-
int ret;
2450-
2451-
ret = qman_delete_cgr(cgr_comp->cgr);
2452-
complete(&cgr_comp->completion);
2453-
2454-
return ret;
2448+
qman_delete_cgr((struct qman_cgr *)p);
24552449
}
24562450

24572451
void qman_delete_cgr_safe(struct qman_cgr *cgr)
24582452
{
2459-
struct task_struct *thread;
2460-
struct cgr_comp cgr_comp;
2461-
24622453
preempt_disable();
24632454
if (qman_cgr_cpus[cgr->cgrid] != smp_processor_id()) {
2464-
init_completion(&cgr_comp.completion);
2465-
cgr_comp.cgr = cgr;
2466-
thread = kthread_create(qman_delete_cgr_thread, &cgr_comp,
2467-
"cgr_del");
2468-
2469-
if (IS_ERR(thread))
2470-
goto out;
2471-
2472-
kthread_bind(thread, qman_cgr_cpus[cgr->cgrid]);
2473-
wake_up_process(thread);
2474-
wait_for_completion(&cgr_comp.completion);
2455+
smp_call_function_single(qman_cgr_cpus[cgr->cgrid],
2456+
qman_delete_cgr_smp_call, cgr, true);
24752457
preempt_enable();
24762458
return;
24772459
}
2478-
out:
2460+
24792461
qman_delete_cgr(cgr);
24802462
preempt_enable();
24812463
}

0 commit comments

Comments
 (0)