Skip to content

Commit e555215

Browse files
committed
tgupdate: merge t/DO-NOT-MERGE-mptcp-enabled-by-default base into t/DO-NOT-MERGE-mptcp-enabled-by-default
2 parents 328f2cf + 877b24a commit e555215

File tree

11 files changed

+132
-98
lines changed

11 files changed

+132
-98
lines changed

drivers/net/ethernet/realtek/r8169_main.c

Lines changed: 0 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
#include <linux/clk.h>
1717
#include <linux/delay.h>
1818
#include <linux/ethtool.h>
19-
#include <linux/hwmon.h>
2019
#include <linux/phy.h>
2120
#include <linux/if_vlan.h>
2221
#include <linux/in.h>
@@ -5368,36 +5367,6 @@ static bool rtl_aspm_is_safe(struct rtl8169_private *tp)
53685367
return false;
53695368
}
53705369

5371-
static int r8169_hwmon_read(struct device *dev, enum hwmon_sensor_types type,
5372-
u32 attr, int channel, long *val)
5373-
{
5374-
struct rtl8169_private *tp = dev_get_drvdata(dev);
5375-
int val_raw;
5376-
5377-
val_raw = phy_read_paged(tp->phydev, 0xbd8, 0x12) & 0x3ff;
5378-
if (val_raw >= 512)
5379-
val_raw -= 1024;
5380-
5381-
*val = 1000 * val_raw / 2;
5382-
5383-
return 0;
5384-
}
5385-
5386-
static const struct hwmon_ops r8169_hwmon_ops = {
5387-
.visible = 0444,
5388-
.read = r8169_hwmon_read,
5389-
};
5390-
5391-
static const struct hwmon_channel_info * const r8169_hwmon_info[] = {
5392-
HWMON_CHANNEL_INFO(temp, HWMON_T_INPUT),
5393-
NULL
5394-
};
5395-
5396-
static const struct hwmon_chip_info r8169_hwmon_chip_info = {
5397-
.ops = &r8169_hwmon_ops,
5398-
.info = r8169_hwmon_info,
5399-
};
5400-
54015370
static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
54025371
{
54035372
struct rtl8169_private *tp;
@@ -5577,12 +5546,6 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
55775546
if (rc)
55785547
return rc;
55795548

5580-
/* The temperature sensor is available from RTl8125B */
5581-
if (IS_REACHABLE(CONFIG_HWMON) && tp->mac_version >= RTL_GIGA_MAC_VER_63)
5582-
/* ignore errors */
5583-
devm_hwmon_device_register_with_info(&pdev->dev, "nic_temp", tp,
5584-
&r8169_hwmon_chip_info,
5585-
NULL);
55865549
rc = register_netdev(dev);
55875550
if (rc)
55885551
return rc;

drivers/net/gtp.c

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1524,8 +1524,8 @@ static int gtp_newlink(struct net *src_net, struct net_device *dev,
15241524
goto out_encap;
15251525
}
15261526

1527-
gn = net_generic(dev_net(dev), gtp_net_id);
1528-
list_add_rcu(&gtp->list, &gn->gtp_dev_list);
1527+
gn = net_generic(src_net, gtp_net_id);
1528+
list_add(&gtp->list, &gn->gtp_dev_list);
15291529
dev->priv_destructor = gtp_destructor;
15301530

15311531
netdev_dbg(dev, "registered new GTP interface\n");
@@ -1551,7 +1551,7 @@ static void gtp_dellink(struct net_device *dev, struct list_head *head)
15511551
hlist_for_each_entry_safe(pctx, next, &gtp->tid_hash[i], hlist_tid)
15521552
pdp_context_delete(pctx);
15531553

1554-
list_del_rcu(&gtp->list);
1554+
list_del(&gtp->list);
15551555
unregister_netdevice_queue(dev, head);
15561556
}
15571557

@@ -2271,16 +2271,19 @@ static int gtp_genl_dump_pdp(struct sk_buff *skb,
22712271
struct gtp_dev *last_gtp = (struct gtp_dev *)cb->args[2], *gtp;
22722272
int i, j, bucket = cb->args[0], skip = cb->args[1];
22732273
struct net *net = sock_net(skb->sk);
2274+
struct net_device *dev;
22742275
struct pdp_ctx *pctx;
2275-
struct gtp_net *gn;
2276-
2277-
gn = net_generic(net, gtp_net_id);
22782276

22792277
if (cb->args[4])
22802278
return 0;
22812279

22822280
rcu_read_lock();
2283-
list_for_each_entry_rcu(gtp, &gn->gtp_dev_list, list) {
2281+
for_each_netdev_rcu(net, dev) {
2282+
if (dev->rtnl_link_ops != &gtp_link_ops)
2283+
continue;
2284+
2285+
gtp = netdev_priv(dev);
2286+
22842287
if (last_gtp && last_gtp != gtp)
22852288
continue;
22862289
else
@@ -2475,9 +2478,14 @@ static void __net_exit gtp_net_exit_batch_rtnl(struct list_head *net_list,
24752478

24762479
list_for_each_entry(net, net_list, exit_list) {
24772480
struct gtp_net *gn = net_generic(net, gtp_net_id);
2478-
struct gtp_dev *gtp;
2481+
struct gtp_dev *gtp, *gtp_next;
2482+
struct net_device *dev;
2483+
2484+
for_each_netdev(net, dev)
2485+
if (dev->rtnl_link_ops == &gtp_link_ops)
2486+
gtp_dellink(dev, dev_to_kill);
24792487

2480-
list_for_each_entry(gtp, &gn->gtp_dev_list, list)
2488+
list_for_each_entry_safe(gtp, gtp_next, &gn->gtp_dev_list, list)
24812489
gtp_dellink(gtp->dev, dev_to_kill);
24822490
}
24832491
}

drivers/net/pfcp.c

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -206,8 +206,8 @@ static int pfcp_newlink(struct net *net, struct net_device *dev,
206206
goto exit_del_pfcp_sock;
207207
}
208208

209-
pn = net_generic(dev_net(dev), pfcp_net_id);
210-
list_add_rcu(&pfcp->list, &pn->pfcp_dev_list);
209+
pn = net_generic(net, pfcp_net_id);
210+
list_add(&pfcp->list, &pn->pfcp_dev_list);
211211

212212
netdev_dbg(dev, "registered new PFCP interface\n");
213213

@@ -224,7 +224,7 @@ static void pfcp_dellink(struct net_device *dev, struct list_head *head)
224224
{
225225
struct pfcp_dev *pfcp = netdev_priv(dev);
226226

227-
list_del_rcu(&pfcp->list);
227+
list_del(&pfcp->list);
228228
unregister_netdevice_queue(dev, head);
229229
}
230230

@@ -247,11 +247,16 @@ static int __net_init pfcp_net_init(struct net *net)
247247
static void __net_exit pfcp_net_exit(struct net *net)
248248
{
249249
struct pfcp_net *pn = net_generic(net, pfcp_net_id);
250-
struct pfcp_dev *pfcp;
250+
struct pfcp_dev *pfcp, *pfcp_next;
251+
struct net_device *dev;
251252
LIST_HEAD(list);
252253

253254
rtnl_lock();
254-
list_for_each_entry(pfcp, &pn->pfcp_dev_list, list)
255+
for_each_netdev(net, dev)
256+
if (dev->rtnl_link_ops == &pfcp_link_ops)
257+
pfcp_dellink(dev, &list);
258+
259+
list_for_each_entry_safe(pfcp, pfcp_next, &pn->pfcp_dev_list, list)
255260
pfcp_dellink(pfcp->dev, &list);
256261

257262
unregister_netdevice_many(&list);

net/core/pktgen.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -851,6 +851,9 @@ static ssize_t get_imix_entries(const char __user *buffer,
851851
unsigned long weight;
852852
unsigned long size;
853853

854+
if (pkt_dev->n_imix_entries >= MAX_IMIX_ENTRIES)
855+
return -E2BIG;
856+
854857
len = num_arg(&buffer[i], max_digits, &size);
855858
if (len < 0)
856859
return len;
@@ -880,9 +883,6 @@ static ssize_t get_imix_entries(const char __user *buffer,
880883

881884
i++;
882885
pkt_dev->n_imix_entries++;
883-
884-
if (pkt_dev->n_imix_entries > MAX_IMIX_ENTRIES)
885-
return -E2BIG;
886886
} while (c == ' ');
887887

888888
return i;

net/ipv4/udp.c

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -576,7 +576,7 @@ static struct sock *udp4_lib_lookup4(const struct net *net,
576576
return NULL;
577577
}
578578

579-
/* In hash4, rehash can happen in connect(), where hash4_cnt keeps unchanged. */
579+
/* udp_rehash4() only checks hslot4, and hash4_cnt is not processed. */
580580
static void udp_rehash4(struct udp_table *udptable, struct sock *sk,
581581
u16 newhash4)
582582
{
@@ -625,15 +625,13 @@ void udp_lib_hash4(struct sock *sk, u16 hash)
625625
struct net *net = sock_net(sk);
626626
struct udp_table *udptable;
627627

628-
/* Connected udp socket can re-connect to another remote address,
629-
* so rehash4 is needed.
628+
/* Connected udp socket can re-connect to another remote address, which
629+
* will be handled by rehash. Thus no need to redo hash4 here.
630630
*/
631-
udptable = net->ipv4.udp_table;
632-
if (udp_hashed4(sk)) {
633-
udp_rehash4(udptable, sk, hash);
631+
if (udp_hashed4(sk))
634632
return;
635-
}
636633

634+
udptable = net->ipv4.udp_table;
637635
hslot = udp_hashslot(udptable, net, udp_sk(sk)->udp_port_hash);
638636
hslot2 = udp_hashslot2(udptable, udp_sk(sk)->udp_portaddr_hash);
639637
hslot4 = udp_hashslot4(udptable, hash);
@@ -2229,14 +2227,14 @@ void udp_lib_rehash(struct sock *sk, u16 newhash, u16 newhash4)
22292227
struct udp_table *udptable = udp_get_table_prot(sk);
22302228
struct udp_hslot *hslot, *hslot2, *nhslot2;
22312229

2230+
hslot = udp_hashslot(udptable, sock_net(sk),
2231+
udp_sk(sk)->udp_port_hash);
22322232
hslot2 = udp_hashslot2(udptable, udp_sk(sk)->udp_portaddr_hash);
22332233
nhslot2 = udp_hashslot2(udptable, newhash);
22342234
udp_sk(sk)->udp_portaddr_hash = newhash;
22352235

22362236
if (hslot2 != nhslot2 ||
22372237
rcu_access_pointer(sk->sk_reuseport_cb)) {
2238-
hslot = udp_hashslot(udptable, sock_net(sk),
2239-
udp_sk(sk)->udp_port_hash);
22402238
/* we must lock primary chain too */
22412239
spin_lock_bh(&hslot->lock);
22422240
if (rcu_access_pointer(sk->sk_reuseport_cb))
@@ -2255,19 +2253,29 @@ void udp_lib_rehash(struct sock *sk, u16 newhash, u16 newhash4)
22552253
spin_unlock(&nhslot2->lock);
22562254
}
22572255

2258-
if (udp_hashed4(sk)) {
2259-
udp_rehash4(udptable, sk, newhash4);
2256+
spin_unlock_bh(&hslot->lock);
2257+
}
2258+
2259+
/* Now process hash4 if necessary:
2260+
* (1) update hslot4;
2261+
* (2) update hslot2->hash4_cnt.
2262+
* Note that hslot2/hslot4 should be checked separately, as
2263+
* either of them may change with the other unchanged.
2264+
*/
2265+
if (udp_hashed4(sk)) {
2266+
spin_lock_bh(&hslot->lock);
22602267

2261-
if (hslot2 != nhslot2) {
2262-
spin_lock(&hslot2->lock);
2263-
udp_hash4_dec(hslot2);
2264-
spin_unlock(&hslot2->lock);
2268+
udp_rehash4(udptable, sk, newhash4);
2269+
if (hslot2 != nhslot2) {
2270+
spin_lock(&hslot2->lock);
2271+
udp_hash4_dec(hslot2);
2272+
spin_unlock(&hslot2->lock);
22652273

2266-
spin_lock(&nhslot2->lock);
2267-
udp_hash4_inc(nhslot2);
2268-
spin_unlock(&nhslot2->lock);
2269-
}
2274+
spin_lock(&nhslot2->lock);
2275+
udp_hash4_inc(nhslot2);
2276+
spin_unlock(&nhslot2->lock);
22702277
}
2278+
22712279
spin_unlock_bh(&hslot->lock);
22722280
}
22732281
}

net/ncsi/internal.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,7 @@ enum {
289289
ncsi_dev_state_config_sp = 0x0301,
290290
ncsi_dev_state_config_cis,
291291
ncsi_dev_state_config_oem_gma,
292+
ncsi_dev_state_config_apply_mac,
292293
ncsi_dev_state_config_clear_vids,
293294
ncsi_dev_state_config_svf,
294295
ncsi_dev_state_config_ev,
@@ -322,6 +323,7 @@ struct ncsi_dev_priv {
322323
#define NCSI_DEV_RESHUFFLE 4
323324
#define NCSI_DEV_RESET 8 /* Reset state of NC */
324325
unsigned int gma_flag; /* OEM GMA flag */
326+
struct sockaddr pending_mac; /* MAC address received from GMA */
325327
spinlock_t lock; /* Protect the NCSI device */
326328
unsigned int package_probe_id;/* Current ID during probe */
327329
unsigned int package_num; /* Number of packages */

net/ncsi/ncsi-manage.c

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1038,7 +1038,7 @@ static void ncsi_configure_channel(struct ncsi_dev_priv *ndp)
10381038
: ncsi_dev_state_config_clear_vids;
10391039
break;
10401040
case ncsi_dev_state_config_oem_gma:
1041-
nd->state = ncsi_dev_state_config_clear_vids;
1041+
nd->state = ncsi_dev_state_config_apply_mac;
10421042

10431043
nca.package = np->id;
10441044
nca.channel = nc->id;
@@ -1050,10 +1050,22 @@ static void ncsi_configure_channel(struct ncsi_dev_priv *ndp)
10501050
nca.type = NCSI_PKT_CMD_OEM;
10511051
ret = ncsi_gma_handler(&nca, nc->version.mf_id);
10521052
}
1053-
if (ret < 0)
1053+
if (ret < 0) {
1054+
nd->state = ncsi_dev_state_config_clear_vids;
10541055
schedule_work(&ndp->work);
1056+
}
10551057

10561058
break;
1059+
case ncsi_dev_state_config_apply_mac:
1060+
rtnl_lock();
1061+
ret = dev_set_mac_address(dev, &ndp->pending_mac, NULL);
1062+
rtnl_unlock();
1063+
if (ret < 0)
1064+
netdev_warn(dev, "NCSI: 'Writing MAC address to device failed\n");
1065+
1066+
nd->state = ncsi_dev_state_config_clear_vids;
1067+
1068+
fallthrough;
10571069
case ncsi_dev_state_config_clear_vids:
10581070
case ncsi_dev_state_config_svf:
10591071
case ncsi_dev_state_config_ev:

net/ncsi/ncsi-rsp.c

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -628,16 +628,14 @@ static int ncsi_rsp_handler_snfc(struct ncsi_request *nr)
628628
static int ncsi_rsp_handler_oem_gma(struct ncsi_request *nr, int mfr_id)
629629
{
630630
struct ncsi_dev_priv *ndp = nr->ndp;
631+
struct sockaddr *saddr = &ndp->pending_mac;
631632
struct net_device *ndev = ndp->ndev.dev;
632633
struct ncsi_rsp_oem_pkt *rsp;
633-
struct sockaddr saddr;
634634
u32 mac_addr_off = 0;
635-
int ret = 0;
636635

637636
/* Get the response header */
638637
rsp = (struct ncsi_rsp_oem_pkt *)skb_network_header(nr->rsp);
639638

640-
saddr.sa_family = ndev->type;
641639
ndev->priv_flags |= IFF_LIVE_ADDR_CHANGE;
642640
if (mfr_id == NCSI_OEM_MFR_BCM_ID)
643641
mac_addr_off = BCM_MAC_ADDR_OFFSET;
@@ -646,22 +644,17 @@ static int ncsi_rsp_handler_oem_gma(struct ncsi_request *nr, int mfr_id)
646644
else if (mfr_id == NCSI_OEM_MFR_INTEL_ID)
647645
mac_addr_off = INTEL_MAC_ADDR_OFFSET;
648646

649-
memcpy(saddr.sa_data, &rsp->data[mac_addr_off], ETH_ALEN);
647+
saddr->sa_family = ndev->type;
648+
memcpy(saddr->sa_data, &rsp->data[mac_addr_off], ETH_ALEN);
650649
if (mfr_id == NCSI_OEM_MFR_BCM_ID || mfr_id == NCSI_OEM_MFR_INTEL_ID)
651-
eth_addr_inc((u8 *)saddr.sa_data);
652-
if (!is_valid_ether_addr((const u8 *)saddr.sa_data))
650+
eth_addr_inc((u8 *)saddr->sa_data);
651+
if (!is_valid_ether_addr((const u8 *)saddr->sa_data))
653652
return -ENXIO;
654653

655654
/* Set the flag for GMA command which should only be called once */
656655
ndp->gma_flag = 1;
657656

658-
rtnl_lock();
659-
ret = dev_set_mac_address(ndev, &saddr, NULL);
660-
rtnl_unlock();
661-
if (ret < 0)
662-
netdev_warn(ndev, "NCSI: 'Writing mac address to device failed\n");
663-
664-
return ret;
657+
return 0;
665658
}
666659

667660
/* Response handler for Mellanox card */

0 commit comments

Comments
 (0)