Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Minor comment merge conflict in mlx5. Staging driver has a fixup due to the skb->xmit_more changes in 'net-next', but was removed in 'net'. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -1328,10 +1328,11 @@ int nicvf_stop(struct net_device *netdev)
|
||||
struct nicvf_cq_poll *cq_poll = NULL;
|
||||
union nic_mbx mbx = {};
|
||||
|
||||
cancel_delayed_work_sync(&nic->link_change_work);
|
||||
|
||||
/* wait till all queued set_rx_mode tasks completes */
|
||||
drain_workqueue(nic->nicvf_rx_mode_wq);
|
||||
if (nic->nicvf_rx_mode_wq) {
|
||||
cancel_delayed_work_sync(&nic->link_change_work);
|
||||
drain_workqueue(nic->nicvf_rx_mode_wq);
|
||||
}
|
||||
|
||||
mbx.msg.msg = NIC_MBOX_MSG_SHUTDOWN;
|
||||
nicvf_send_msg_to_pf(nic, &mbx);
|
||||
@@ -1452,7 +1453,8 @@ int nicvf_open(struct net_device *netdev)
|
||||
struct nicvf_cq_poll *cq_poll = NULL;
|
||||
|
||||
/* wait till all queued set_rx_mode tasks completes if any */
|
||||
drain_workqueue(nic->nicvf_rx_mode_wq);
|
||||
if (nic->nicvf_rx_mode_wq)
|
||||
drain_workqueue(nic->nicvf_rx_mode_wq);
|
||||
|
||||
netif_carrier_off(netdev);
|
||||
|
||||
@@ -1550,10 +1552,12 @@ int nicvf_open(struct net_device *netdev)
|
||||
/* Send VF config done msg to PF */
|
||||
nicvf_send_cfg_done(nic);
|
||||
|
||||
INIT_DELAYED_WORK(&nic->link_change_work,
|
||||
nicvf_link_status_check_task);
|
||||
queue_delayed_work(nic->nicvf_rx_mode_wq,
|
||||
&nic->link_change_work, 0);
|
||||
if (nic->nicvf_rx_mode_wq) {
|
||||
INIT_DELAYED_WORK(&nic->link_change_work,
|
||||
nicvf_link_status_check_task);
|
||||
queue_delayed_work(nic->nicvf_rx_mode_wq,
|
||||
&nic->link_change_work, 0);
|
||||
}
|
||||
|
||||
return 0;
|
||||
cleanup:
|
||||
|
@@ -105,20 +105,19 @@ static inline struct pgcache *nicvf_alloc_page(struct nicvf *nic,
|
||||
/* Check if page can be recycled */
|
||||
if (page) {
|
||||
ref_count = page_ref_count(page);
|
||||
/* Check if this page has been used once i.e 'put_page'
|
||||
* called after packet transmission i.e internal ref_count
|
||||
* and page's ref_count are equal i.e page can be recycled.
|
||||
/* This page can be recycled if internal ref_count and page's
|
||||
* ref_count are equal, indicating that the page has been used
|
||||
* once for packet transmission. For non-XDP mode, internal
|
||||
* ref_count is always '1'.
|
||||
*/
|
||||
if (rbdr->is_xdp && (ref_count == pgcache->ref_count))
|
||||
pgcache->ref_count--;
|
||||
else
|
||||
page = NULL;
|
||||
|
||||
/* In non-XDP mode, page's ref_count needs to be '1' for it
|
||||
* to be recycled.
|
||||
*/
|
||||
if (!rbdr->is_xdp && (ref_count != 1))
|
||||
if (rbdr->is_xdp) {
|
||||
if (ref_count == pgcache->ref_count)
|
||||
pgcache->ref_count--;
|
||||
else
|
||||
page = NULL;
|
||||
} else if (ref_count != 1) {
|
||||
page = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if (!page) {
|
||||
@@ -365,11 +364,10 @@ static void nicvf_free_rbdr(struct nicvf *nic, struct rbdr *rbdr)
|
||||
while (head < rbdr->pgcnt) {
|
||||
pgcache = &rbdr->pgcache[head];
|
||||
if (pgcache->page && page_ref_count(pgcache->page) != 0) {
|
||||
if (!rbdr->is_xdp) {
|
||||
put_page(pgcache->page);
|
||||
continue;
|
||||
if (rbdr->is_xdp) {
|
||||
page_ref_sub(pgcache->page,
|
||||
pgcache->ref_count - 1);
|
||||
}
|
||||
page_ref_sub(pgcache->page, pgcache->ref_count - 1);
|
||||
put_page(pgcache->page);
|
||||
}
|
||||
head++;
|
||||
|
Reference in New Issue
Block a user