mirror of
https://github.com/armbian/linux-cix.git
synced 2026-01-06 12:30:45 -08:00
Merge tag 'net-6.1-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Pull networking fixes from Paolo Abeni: "Including fixes from bluetooth and netfilter. Current release - regressions: - net: several zerocopy flags fixes - netfilter: fix possible memory leak in nf_nat_init() - openvswitch: add missing .resv_start_op Previous releases - regressions: - neigh: fix null-ptr-deref in neigh_table_clear() - sched: fix use after free in red_enqueue() - dsa: fall back to default tagger if we can't load the one from DT - bluetooth: fix use-after-free in l2cap_conn_del() Previous releases - always broken: - netfilter: netlink notifier might race to release objects - nfc: fix potential memory leak of skb - bluetooth: fix use-after-free caused by l2cap_reassemble_sdu - bluetooth: use skb_put to set length - eth: tun: fix bugs for oversize packet when napi frags enabled - eth: lan966x: fixes for when MTU is changed - eth: dwmac-loongson: fix invalid mdio_node" * tag 'net-6.1-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net: (53 commits) vsock: fix possible infinite sleep in vsock_connectible_wait_data() vsock: remove the unused 'wait' in vsock_connectible_recvmsg() ipv6: fix WARNING in ip6_route_net_exit_late() bridge: Fix flushing of dynamic FDB entries net, neigh: Fix null-ptr-deref in neigh_table_clear() net/smc: Fix possible leaked pernet namespace in smc_init() stmmac: dwmac-loongson: fix invalid mdio_node ibmvnic: Free rwi on reset success net: mdio: fix undefined behavior in bit shift for __mdiobus_register Bluetooth: L2CAP: Fix attempting to access uninitialized memory Bluetooth: L2CAP: Fix l2cap_global_chan_by_psm Bluetooth: L2CAP: Fix accepting connection request for invalid SPSM Bluetooth: hci_conn: Fix not restoring ISO buffer count on disconnect Bluetooth: L2CAP: Fix memory leak in vhci_write Bluetooth: L2CAP: fix use-after-free in l2cap_conn_del() Bluetooth: virtio_bt: Use skb_put to set length Bluetooth: hci_conn: Fix CIS connection dst_type handling Bluetooth: L2CAP: Fix use-after-free caused by l2cap_reassemble_sdu netfilter: ipset: enforce documented limit to prevent allocating huge memory isdn: mISDN: netjet: fix wrong check of device registration ...
This commit is contained in:
@@ -5041,7 +5041,7 @@ F: drivers/scsi/snic/
|
||||
|
||||
CISCO VIC ETHERNET NIC DRIVER
|
||||
M: Christian Benvenuti <benve@cisco.com>
|
||||
M: Govindarajulu Varadarajan <_govind@gmx.com>
|
||||
M: Satish Kharat <satishkh@cisco.com>
|
||||
S: Supported
|
||||
F: drivers/net/ethernet/cisco/enic/
|
||||
|
||||
@@ -9778,7 +9778,10 @@ S: Supported
|
||||
F: drivers/pci/hotplug/rpaphp*
|
||||
|
||||
IBM Power SRIOV Virtual NIC Device Driver
|
||||
M: Dany Madden <drt@linux.ibm.com>
|
||||
M: Haren Myneni <haren@linux.ibm.com>
|
||||
M: Rick Lindsley <ricklind@linux.ibm.com>
|
||||
R: Nick Child <nnac123@linux.ibm.com>
|
||||
R: Dany Madden <danymadden@us.ibm.com>
|
||||
R: Thomas Falcon <tlfalcon@linux.ibm.com>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Supported
|
||||
|
||||
@@ -219,7 +219,7 @@ static void virtbt_rx_work(struct work_struct *work)
|
||||
if (!skb)
|
||||
return;
|
||||
|
||||
skb->len = len;
|
||||
skb_put(skb, len);
|
||||
virtbt_rx_handle(vbt, skb);
|
||||
|
||||
if (virtbt_add_inbuf(vbt) < 0)
|
||||
|
||||
@@ -956,7 +956,7 @@ nj_release(struct tiger_hw *card)
|
||||
}
|
||||
if (card->irq > 0)
|
||||
free_irq(card->irq, card);
|
||||
if (card->isac.dch.dev.dev.class)
|
||||
if (device_is_registered(&card->isac.dch.dev.dev))
|
||||
mISDN_unregister_device(&card->isac.dch.dev);
|
||||
|
||||
for (i = 0; i < 2; i++) {
|
||||
|
||||
@@ -233,11 +233,12 @@ mISDN_register_device(struct mISDNdevice *dev,
|
||||
if (debug & DEBUG_CORE)
|
||||
printk(KERN_DEBUG "mISDN_register %s %d\n",
|
||||
dev_name(&dev->dev), dev->id);
|
||||
dev->dev.class = &mISDN_class;
|
||||
|
||||
err = create_stack(dev);
|
||||
if (err)
|
||||
goto error1;
|
||||
|
||||
dev->dev.class = &mISDN_class;
|
||||
dev->dev.platform_data = dev;
|
||||
dev->dev.parent = parent;
|
||||
dev_set_drvdata(&dev->dev, dev);
|
||||
@@ -249,8 +250,8 @@ mISDN_register_device(struct mISDNdevice *dev,
|
||||
|
||||
error3:
|
||||
delete_stack(dev);
|
||||
return err;
|
||||
error1:
|
||||
put_device(&dev->dev);
|
||||
return err;
|
||||
|
||||
}
|
||||
|
||||
@@ -376,6 +376,17 @@ static struct mdio_driver dsa_loop_drv = {
|
||||
|
||||
#define NUM_FIXED_PHYS (DSA_LOOP_NUM_PORTS - 2)
|
||||
|
||||
static void dsa_loop_phydevs_unregister(void)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < NUM_FIXED_PHYS; i++)
|
||||
if (!IS_ERR(phydevs[i])) {
|
||||
fixed_phy_unregister(phydevs[i]);
|
||||
phy_device_free(phydevs[i]);
|
||||
}
|
||||
}
|
||||
|
||||
static int __init dsa_loop_init(void)
|
||||
{
|
||||
struct fixed_phy_status status = {
|
||||
@@ -383,23 +394,23 @@ static int __init dsa_loop_init(void)
|
||||
.speed = SPEED_100,
|
||||
.duplex = DUPLEX_FULL,
|
||||
};
|
||||
unsigned int i;
|
||||
unsigned int i, ret;
|
||||
|
||||
for (i = 0; i < NUM_FIXED_PHYS; i++)
|
||||
phydevs[i] = fixed_phy_register(PHY_POLL, &status, NULL);
|
||||
|
||||
return mdio_driver_register(&dsa_loop_drv);
|
||||
ret = mdio_driver_register(&dsa_loop_drv);
|
||||
if (ret)
|
||||
dsa_loop_phydevs_unregister();
|
||||
|
||||
return ret;
|
||||
}
|
||||
module_init(dsa_loop_init);
|
||||
|
||||
static void __exit dsa_loop_exit(void)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
mdio_driver_unregister(&dsa_loop_drv);
|
||||
for (i = 0; i < NUM_FIXED_PHYS; i++)
|
||||
if (!IS_ERR(phydevs[i]))
|
||||
fixed_phy_unregister(phydevs[i]);
|
||||
dsa_loop_phydevs_unregister();
|
||||
}
|
||||
module_exit(dsa_loop_exit);
|
||||
|
||||
|
||||
@@ -1512,16 +1512,15 @@ static struct notifier_block adin1110_switchdev_notifier = {
|
||||
.notifier_call = adin1110_switchdev_event,
|
||||
};
|
||||
|
||||
static void adin1110_unregister_notifiers(void *data)
|
||||
static void adin1110_unregister_notifiers(void)
|
||||
{
|
||||
unregister_switchdev_blocking_notifier(&adin1110_switchdev_blocking_notifier);
|
||||
unregister_switchdev_notifier(&adin1110_switchdev_notifier);
|
||||
unregister_netdevice_notifier(&adin1110_netdevice_nb);
|
||||
}
|
||||
|
||||
static int adin1110_setup_notifiers(struct adin1110_priv *priv)
|
||||
static int adin1110_setup_notifiers(void)
|
||||
{
|
||||
struct device *dev = &priv->spidev->dev;
|
||||
int ret;
|
||||
|
||||
ret = register_netdevice_notifier(&adin1110_netdevice_nb);
|
||||
@@ -1536,13 +1535,14 @@ static int adin1110_setup_notifiers(struct adin1110_priv *priv)
|
||||
if (ret < 0)
|
||||
goto err_sdev;
|
||||
|
||||
return devm_add_action_or_reset(dev, adin1110_unregister_notifiers, NULL);
|
||||
return 0;
|
||||
|
||||
err_sdev:
|
||||
unregister_switchdev_notifier(&adin1110_switchdev_notifier);
|
||||
|
||||
err_netdev:
|
||||
unregister_netdevice_notifier(&adin1110_netdevice_nb);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -1613,10 +1613,6 @@ static int adin1110_probe_netdevs(struct adin1110_priv *priv)
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
ret = adin1110_setup_notifiers(priv);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
for (i = 0; i < priv->cfg->ports_nr; i++) {
|
||||
ret = devm_register_netdev(dev, priv->ports[i]->netdev);
|
||||
if (ret < 0) {
|
||||
@@ -1693,7 +1689,31 @@ static struct spi_driver adin1110_driver = {
|
||||
.probe = adin1110_probe,
|
||||
.id_table = adin1110_spi_id,
|
||||
};
|
||||
module_spi_driver(adin1110_driver);
|
||||
|
||||
static int __init adin1110_driver_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = adin1110_setup_notifiers();
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
ret = spi_register_driver(&adin1110_driver);
|
||||
if (ret < 0) {
|
||||
adin1110_unregister_notifiers();
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void __exit adin1110_exit(void)
|
||||
{
|
||||
adin1110_unregister_notifiers();
|
||||
spi_unregister_driver(&adin1110_driver);
|
||||
}
|
||||
module_init(adin1110_driver_init);
|
||||
module_exit(adin1110_exit);
|
||||
|
||||
MODULE_DESCRIPTION("ADIN1110 Network driver");
|
||||
MODULE_AUTHOR("Alexandru Tachici <alexandru.tachici@analog.com>");
|
||||
|
||||
@@ -713,7 +713,7 @@ fec_enet_txq_put_data_tso(struct fec_enet_priv_tx_q *txq, struct sk_buff *skb,
|
||||
dev_kfree_skb_any(skb);
|
||||
if (net_ratelimit())
|
||||
netdev_err(ndev, "Tx DMA memory map failed\n");
|
||||
return NETDEV_TX_BUSY;
|
||||
return NETDEV_TX_OK;
|
||||
}
|
||||
|
||||
bdp->cbd_datlen = cpu_to_fec16(size);
|
||||
@@ -775,7 +775,7 @@ fec_enet_txq_put_hdr_tso(struct fec_enet_priv_tx_q *txq,
|
||||
dev_kfree_skb_any(skb);
|
||||
if (net_ratelimit())
|
||||
netdev_err(ndev, "Tx DMA memory map failed\n");
|
||||
return NETDEV_TX_BUSY;
|
||||
return NETDEV_TX_OK;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3007,19 +3007,19 @@ static void __ibmvnic_reset(struct work_struct *work)
|
||||
rwi = get_next_rwi(adapter);
|
||||
|
||||
/*
|
||||
* If there is another reset queued, free the previous rwi
|
||||
* and process the new reset even if previous reset failed
|
||||
* (the previous reset could have failed because of a fail
|
||||
* over for instance, so process the fail over).
|
||||
*
|
||||
* If there are no resets queued and the previous reset failed,
|
||||
* the adapter would be in an undefined state. So retry the
|
||||
* previous reset as a hard reset.
|
||||
*
|
||||
* Else, free the previous rwi and, if there is another reset
|
||||
* queued, process the new reset even if previous reset failed
|
||||
* (the previous reset could have failed because of a fail
|
||||
* over for instance, so process the fail over).
|
||||
*/
|
||||
if (rwi)
|
||||
kfree(tmprwi);
|
||||
else if (rc)
|
||||
if (!rwi && rc)
|
||||
rwi = tmprwi;
|
||||
else
|
||||
kfree(tmprwi);
|
||||
|
||||
if (rwi && (rwi->reset_reason == VNIC_RESET_FAILOVER ||
|
||||
rwi->reset_reason == VNIC_RESET_MOBILITY || rc))
|
||||
|
||||
@@ -414,13 +414,15 @@ static struct sk_buff *lan966x_fdma_rx_get_frame(struct lan966x_rx *rx)
|
||||
/* Get the received frame and unmap it */
|
||||
db = &rx->dcbs[rx->dcb_index].db[rx->db_index];
|
||||
page = rx->page[rx->dcb_index][rx->db_index];
|
||||
|
||||
dma_sync_single_for_cpu(lan966x->dev, (dma_addr_t)db->dataptr,
|
||||
FDMA_DCB_STATUS_BLOCKL(db->status),
|
||||
DMA_FROM_DEVICE);
|
||||
|
||||
skb = build_skb(page_address(page), PAGE_SIZE << rx->page_order);
|
||||
if (unlikely(!skb))
|
||||
goto unmap_page;
|
||||
|
||||
dma_unmap_single(lan966x->dev, (dma_addr_t)db->dataptr,
|
||||
FDMA_DCB_STATUS_BLOCKL(db->status),
|
||||
DMA_FROM_DEVICE);
|
||||
skb_put(skb, FDMA_DCB_STATUS_BLOCKL(db->status));
|
||||
|
||||
lan966x_ifh_get_src_port(skb->data, &src_port);
|
||||
@@ -429,6 +431,10 @@ static struct sk_buff *lan966x_fdma_rx_get_frame(struct lan966x_rx *rx)
|
||||
if (WARN_ON(src_port >= lan966x->num_phys_ports))
|
||||
goto free_skb;
|
||||
|
||||
dma_unmap_single_attrs(lan966x->dev, (dma_addr_t)db->dataptr,
|
||||
PAGE_SIZE << rx->page_order, DMA_FROM_DEVICE,
|
||||
DMA_ATTR_SKIP_CPU_SYNC);
|
||||
|
||||
skb->dev = lan966x->ports[src_port]->dev;
|
||||
skb_pull(skb, IFH_LEN * sizeof(u32));
|
||||
|
||||
@@ -454,9 +460,9 @@ static struct sk_buff *lan966x_fdma_rx_get_frame(struct lan966x_rx *rx)
|
||||
free_skb:
|
||||
kfree_skb(skb);
|
||||
unmap_page:
|
||||
dma_unmap_page(lan966x->dev, (dma_addr_t)db->dataptr,
|
||||
FDMA_DCB_STATUS_BLOCKL(db->status),
|
||||
DMA_FROM_DEVICE);
|
||||
dma_unmap_single_attrs(lan966x->dev, (dma_addr_t)db->dataptr,
|
||||
PAGE_SIZE << rx->page_order, DMA_FROM_DEVICE,
|
||||
DMA_ATTR_SKIP_CPU_SYNC);
|
||||
__free_pages(page, rx->page_order);
|
||||
|
||||
return NULL;
|
||||
@@ -668,12 +674,14 @@ static int lan966x_fdma_get_max_mtu(struct lan966x *lan966x)
|
||||
int i;
|
||||
|
||||
for (i = 0; i < lan966x->num_phys_ports; ++i) {
|
||||
struct lan966x_port *port;
|
||||
int mtu;
|
||||
|
||||
if (!lan966x->ports[i])
|
||||
port = lan966x->ports[i];
|
||||
if (!port)
|
||||
continue;
|
||||
|
||||
mtu = lan966x->ports[i]->dev->mtu;
|
||||
mtu = lan_rd(lan966x, DEV_MAC_MAXLEN_CFG(port->chip_port));
|
||||
if (mtu > max_mtu)
|
||||
max_mtu = mtu;
|
||||
}
|
||||
@@ -733,6 +741,8 @@ int lan966x_fdma_change_mtu(struct lan966x *lan966x)
|
||||
|
||||
max_mtu = lan966x_fdma_get_max_mtu(lan966x);
|
||||
max_mtu += IFH_LEN * sizeof(u32);
|
||||
max_mtu += SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
|
||||
max_mtu += VLAN_HLEN * 2;
|
||||
|
||||
if (round_up(max_mtu, PAGE_SIZE) / PAGE_SIZE - 1 ==
|
||||
lan966x->rx.page_order)
|
||||
|
||||
@@ -386,7 +386,7 @@ static int lan966x_port_change_mtu(struct net_device *dev, int new_mtu)
|
||||
int old_mtu = dev->mtu;
|
||||
int err;
|
||||
|
||||
lan_wr(DEV_MAC_MAXLEN_CFG_MAX_LEN_SET(new_mtu),
|
||||
lan_wr(DEV_MAC_MAXLEN_CFG_MAX_LEN_SET(LAN966X_HW_MTU(new_mtu)),
|
||||
lan966x, DEV_MAC_MAXLEN_CFG(port->chip_port));
|
||||
dev->mtu = new_mtu;
|
||||
|
||||
@@ -395,7 +395,7 @@ static int lan966x_port_change_mtu(struct net_device *dev, int new_mtu)
|
||||
|
||||
err = lan966x_fdma_change_mtu(lan966x);
|
||||
if (err) {
|
||||
lan_wr(DEV_MAC_MAXLEN_CFG_MAX_LEN_SET(old_mtu),
|
||||
lan_wr(DEV_MAC_MAXLEN_CFG_MAX_LEN_SET(LAN966X_HW_MTU(old_mtu)),
|
||||
lan966x, DEV_MAC_MAXLEN_CFG(port->chip_port));
|
||||
dev->mtu = old_mtu;
|
||||
}
|
||||
|
||||
@@ -26,6 +26,8 @@
|
||||
#define LAN966X_BUFFER_MEMORY (160 * 1024)
|
||||
#define LAN966X_BUFFER_MIN_SZ 60
|
||||
|
||||
#define LAN966X_HW_MTU(mtu) ((mtu) + ETH_HLEN + ETH_FCS_LEN)
|
||||
|
||||
#define PGID_AGGR 64
|
||||
#define PGID_SRC 80
|
||||
#define PGID_ENTRIES 89
|
||||
|
||||
@@ -585,6 +585,21 @@ enum lan966x_target {
|
||||
#define DEV_MAC_MAXLEN_CFG_MAX_LEN_GET(x)\
|
||||
FIELD_GET(DEV_MAC_MAXLEN_CFG_MAX_LEN, x)
|
||||
|
||||
/* DEV:MAC_CFG_STATUS:MAC_TAGS_CFG */
|
||||
#define DEV_MAC_TAGS_CFG(t) __REG(TARGET_DEV, t, 8, 28, 0, 1, 44, 12, 0, 1, 4)
|
||||
|
||||
#define DEV_MAC_TAGS_CFG_VLAN_DBL_AWR_ENA BIT(1)
|
||||
#define DEV_MAC_TAGS_CFG_VLAN_DBL_AWR_ENA_SET(x)\
|
||||
FIELD_PREP(DEV_MAC_TAGS_CFG_VLAN_DBL_AWR_ENA, x)
|
||||
#define DEV_MAC_TAGS_CFG_VLAN_DBL_AWR_ENA_GET(x)\
|
||||
FIELD_GET(DEV_MAC_TAGS_CFG_VLAN_DBL_AWR_ENA, x)
|
||||
|
||||
#define DEV_MAC_TAGS_CFG_VLAN_AWR_ENA BIT(0)
|
||||
#define DEV_MAC_TAGS_CFG_VLAN_AWR_ENA_SET(x)\
|
||||
FIELD_PREP(DEV_MAC_TAGS_CFG_VLAN_AWR_ENA, x)
|
||||
#define DEV_MAC_TAGS_CFG_VLAN_AWR_ENA_GET(x)\
|
||||
FIELD_GET(DEV_MAC_TAGS_CFG_VLAN_AWR_ENA, x)
|
||||
|
||||
/* DEV:MAC_CFG_STATUS:MAC_IFG_CFG */
|
||||
#define DEV_MAC_IFG_CFG(t) __REG(TARGET_DEV, t, 8, 28, 0, 1, 44, 20, 0, 1, 4)
|
||||
|
||||
|
||||
@@ -169,6 +169,12 @@ void lan966x_vlan_port_apply(struct lan966x_port *port)
|
||||
ANA_VLAN_CFG_VLAN_POP_CNT,
|
||||
lan966x, ANA_VLAN_CFG(port->chip_port));
|
||||
|
||||
lan_rmw(DEV_MAC_TAGS_CFG_VLAN_AWR_ENA_SET(port->vlan_aware) |
|
||||
DEV_MAC_TAGS_CFG_VLAN_DBL_AWR_ENA_SET(port->vlan_aware),
|
||||
DEV_MAC_TAGS_CFG_VLAN_AWR_ENA |
|
||||
DEV_MAC_TAGS_CFG_VLAN_DBL_AWR_ENA,
|
||||
lan966x, DEV_MAC_TAGS_CFG(port->chip_port));
|
||||
|
||||
/* Drop frames with multicast source address */
|
||||
val = ANA_DROP_CFG_DROP_MC_SMAC_ENA_SET(1);
|
||||
if (port->vlan_aware && !pvid)
|
||||
|
||||
@@ -1059,8 +1059,10 @@ static int efx_pci_probe(struct pci_dev *pci_dev,
|
||||
|
||||
/* Allocate and initialise a struct net_device */
|
||||
net_dev = alloc_etherdev_mq(sizeof(probe_data), EFX_MAX_CORE_TX_QUEUES);
|
||||
if (!net_dev)
|
||||
return -ENOMEM;
|
||||
if (!net_dev) {
|
||||
rc = -ENOMEM;
|
||||
goto fail0;
|
||||
}
|
||||
probe_ptr = netdev_priv(net_dev);
|
||||
*probe_ptr = probe_data;
|
||||
efx->net_dev = net_dev;
|
||||
@@ -1132,6 +1134,8 @@ static int efx_pci_probe(struct pci_dev *pci_dev,
|
||||
WARN_ON(rc > 0);
|
||||
netif_dbg(efx, drv, efx->net_dev, "initialisation failed. rc=%d\n", rc);
|
||||
free_netdev(net_dev);
|
||||
fail0:
|
||||
kfree(probe_data);
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
||||
@@ -51,7 +51,6 @@ static int loongson_dwmac_probe(struct pci_dev *pdev, const struct pci_device_id
|
||||
struct stmmac_resources res;
|
||||
struct device_node *np;
|
||||
int ret, i, phy_mode;
|
||||
bool mdio = false;
|
||||
|
||||
np = dev_of_node(&pdev->dev);
|
||||
|
||||
@@ -69,12 +68,10 @@ static int loongson_dwmac_probe(struct pci_dev *pdev, const struct pci_device_id
|
||||
if (!plat)
|
||||
return -ENOMEM;
|
||||
|
||||
plat->mdio_node = of_get_child_by_name(np, "mdio");
|
||||
if (plat->mdio_node) {
|
||||
dev_err(&pdev->dev, "Found MDIO subnode\n");
|
||||
mdio = true;
|
||||
}
|
||||
dev_info(&pdev->dev, "Found MDIO subnode\n");
|
||||
|
||||
if (mdio) {
|
||||
plat->mdio_bus_data = devm_kzalloc(&pdev->dev,
|
||||
sizeof(*plat->mdio_bus_data),
|
||||
GFP_KERNEL);
|
||||
|
||||
@@ -108,7 +108,7 @@
|
||||
* @next_tx_buf_to_use: next Tx buffer to write to
|
||||
* @next_rx_buf_to_use: next Rx buffer to read from
|
||||
* @base_addr: base address of the Emaclite device
|
||||
* @reset_lock: lock used for synchronization
|
||||
* @reset_lock: lock to serialize xmit and tx_timeout execution
|
||||
* @deferred_skb: holds an skb (for transmission at a later time) when the
|
||||
* Tx buffer is not free
|
||||
* @phy_dev: pointer to the PHY device
|
||||
|
||||
@@ -583,7 +583,7 @@ int __mdiobus_register(struct mii_bus *bus, struct module *owner)
|
||||
}
|
||||
|
||||
for (i = 0; i < PHY_MAX_ADDR; i++) {
|
||||
if ((bus->phy_mask & (1 << i)) == 0) {
|
||||
if ((bus->phy_mask & BIT(i)) == 0) {
|
||||
struct phy_device *phydev;
|
||||
|
||||
phydev = mdiobus_scan(bus, i);
|
||||
|
||||
@@ -1459,7 +1459,8 @@ static struct sk_buff *tun_napi_alloc_frags(struct tun_file *tfile,
|
||||
int err;
|
||||
int i;
|
||||
|
||||
if (it->nr_segs > MAX_SKB_FRAGS + 1)
|
||||
if (it->nr_segs > MAX_SKB_FRAGS + 1 ||
|
||||
len > (ETH_MAX_MTU - NET_SKB_PAD - NET_IP_ALIGN))
|
||||
return ERR_PTR(-EMSGSIZE);
|
||||
|
||||
local_bh_disable();
|
||||
|
||||
@@ -249,11 +249,19 @@ static int fdp_nci_close(struct nci_dev *ndev)
|
||||
static int fdp_nci_send(struct nci_dev *ndev, struct sk_buff *skb)
|
||||
{
|
||||
struct fdp_nci_info *info = nci_get_drvdata(ndev);
|
||||
int ret;
|
||||
|
||||
if (atomic_dec_and_test(&info->data_pkt_counter))
|
||||
info->data_pkt_counter_cb(ndev);
|
||||
|
||||
return info->phy_ops->write(info->phy, skb);
|
||||
ret = info->phy_ops->write(info->phy, skb);
|
||||
if (ret < 0) {
|
||||
kfree_skb(skb);
|
||||
return ret;
|
||||
}
|
||||
|
||||
consume_skb(skb);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int fdp_nci_request_firmware(struct nci_dev *ndev)
|
||||
|
||||
@@ -132,10 +132,15 @@ static int nfcmrvl_i2c_nci_send(struct nfcmrvl_private *priv,
|
||||
ret = -EREMOTEIO;
|
||||
} else
|
||||
ret = 0;
|
||||
kfree_skb(skb);
|
||||
}
|
||||
|
||||
return ret;
|
||||
if (ret) {
|
||||
kfree_skb(skb);
|
||||
return ret;
|
||||
}
|
||||
|
||||
consume_skb(skb);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void nfcmrvl_i2c_nci_update_config(struct nfcmrvl_private *priv,
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user