mirror of
https://github.com/armbian/linux-cix.git
synced 2026-01-06 12:30:45 -08:00
Merge tag 'net-5.16-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Pull networking fixes from Jakub Kicinski:
"Including fixes from bpf, can and netfilter.
Current release - regressions:
- bpf: do not reject when the stack read size is different from the
tracked scalar size
- net: fix premature exit from NAPI state polling in napi_disable()
- riscv, bpf: fix RV32 broken build, and silence RV64 warning
Current release - new code bugs:
- net: fix possible NULL deref in sock_reserve_memory
- amt: fix error return code in amt_init(); fix stopping the
workqueue
- ax88796c: use the correct ioctl callback
Previous releases - always broken:
- bpf: stop caching subprog index in the bpf_pseudo_func insn
- security: fixups for the security hooks in sctp
- nfc: add necessary privilege flags in netlink layer, limit
operations to admin only
- vsock: prevent unnecessary refcnt inc for non-blocking connect
- net/smc: fix sk_refcnt underflow on link down and fallback
- nfnetlink_queue: fix OOB when mac header was cleared
- can: j1939: ignore invalid messages per standard
- bpf, sockmap:
- fix race in ingress receive verdict with redirect to self
- fix incorrect sk_skb data_end access when src_reg = dst_reg
- strparser, and tls are reusing qdisc_skb_cb and colliding
- ethtool: fix ethtool msg len calculation for pause stats
- vlan: fix a UAF in vlan_dev_real_dev() when ref-holder tries to
access an unregistering real_dev
- udp6: make encap_rcv() bump the v6 not v4 stats
- drv: prestera: add explicit padding to fix m68k build
- drv: felix: fix broken VLAN-tagged PTP under VLAN-aware bridge
- drv: mvpp2: fix wrong SerDes reconfiguration order
Misc & small latecomers:
- ipvs: auto-load ipvs on genl access
- mctp: sanity check the struct sockaddr_mctp padding fields
- libfs: support RENAME_EXCHANGE in simple_rename()
- avoid double accounting for pure zerocopy skbs"
* tag 'net-5.16-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net: (123 commits)
selftests/net: udpgso_bench_rx: fix port argument
net: wwan: iosm: fix compilation warning
cxgb4: fix eeprom len when diagnostics not implemented
net: fix premature exit from NAPI state polling in napi_disable()
net/smc: fix sk_refcnt underflow on linkdown and fallback
net/mlx5: Lag, fix a potential Oops with mlx5_lag_create_definer()
gve: fix unmatched u64_stats_update_end()
net: ethernet: lantiq_etop: Fix compilation error
selftests: forwarding: Fix packet matching in mirroring selftests
vsock: prevent unnecessary refcnt inc for nonblocking connect
net: marvell: mvpp2: Fix wrong SerDes reconfiguration order
net: ethernet: ti: cpsw_ale: Fix access to un-initialized memory
net: stmmac: allow a tc-taprio base-time of zero
selftests: net: test_vxlan_under_vrf: fix HV connectivity test
net: hns3: allow configure ETS bandwidth of all TCs
net: hns3: remove check VF uc mac exist when set by PF
net: hns3: fix some mac statistics is always 0 in device version V2
net: hns3: fix kernel crash when unload VF while it is being reset
net: hns3: sync rx ring head in echo common pull
net: hns3: fix pfc packet number incorrect after querying pfc parameters
...
This commit is contained in:
@@ -1004,13 +1004,11 @@ udp_l3mdev_accept - BOOLEAN
|
||||
udp_mem - vector of 3 INTEGERs: min, pressure, max
|
||||
Number of pages allowed for queueing by all UDP sockets.
|
||||
|
||||
min: Below this number of pages UDP is not bothered about its
|
||||
memory appetite. When amount of memory allocated by UDP exceeds
|
||||
this number, UDP starts to moderate memory usage.
|
||||
min: Number of pages allowed for queueing by all UDP sockets.
|
||||
|
||||
pressure: This value was introduced to follow format of tcp_mem.
|
||||
|
||||
max: Number of pages allowed for queueing by all UDP sockets.
|
||||
max: This value was introduced to follow format of tcp_mem.
|
||||
|
||||
Default is calculated at boot time from amount of available memory.
|
||||
|
||||
|
||||
@@ -15,10 +15,7 @@ For security module support, three SCTP specific hooks have been implemented::
|
||||
security_sctp_assoc_request()
|
||||
security_sctp_bind_connect()
|
||||
security_sctp_sk_clone()
|
||||
|
||||
Also the following security hook has been utilised::
|
||||
|
||||
security_inet_conn_established()
|
||||
security_sctp_assoc_established()
|
||||
|
||||
The usage of these hooks are described below with the SELinux implementation
|
||||
described in the `SCTP SELinux Support`_ chapter.
|
||||
@@ -26,11 +23,11 @@ described in the `SCTP SELinux Support`_ chapter.
|
||||
|
||||
security_sctp_assoc_request()
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Passes the ``@ep`` and ``@chunk->skb`` of the association INIT packet to the
|
||||
Passes the ``@asoc`` and ``@chunk->skb`` of the association INIT packet to the
|
||||
security module. Returns 0 on success, error on failure.
|
||||
::
|
||||
|
||||
@ep - pointer to sctp endpoint structure.
|
||||
@asoc - pointer to sctp association structure.
|
||||
@skb - pointer to skbuff of association packet.
|
||||
|
||||
|
||||
@@ -117,16 +114,17 @@ Called whenever a new socket is created by **accept**\(2)
|
||||
calls **sctp_peeloff**\(3).
|
||||
::
|
||||
|
||||
@ep - pointer to current sctp endpoint structure.
|
||||
@asoc - pointer to current sctp association structure.
|
||||
@sk - pointer to current sock structure.
|
||||
@sk - pointer to new sock structure.
|
||||
@newsk - pointer to new sock structure.
|
||||
|
||||
|
||||
security_inet_conn_established()
|
||||
security_sctp_assoc_established()
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Called when a COOKIE ACK is received::
|
||||
Called when a COOKIE ACK is received, and the peer secid will be
|
||||
saved into ``@asoc->peer_secid`` for client::
|
||||
|
||||
@sk - pointer to sock structure.
|
||||
@asoc - pointer to sctp association structure.
|
||||
@skb - pointer to skbuff of the COOKIE ACK packet.
|
||||
|
||||
|
||||
@@ -134,7 +132,7 @@ Security Hooks used for Association Establishment
|
||||
-------------------------------------------------
|
||||
|
||||
The following diagram shows the use of ``security_sctp_bind_connect()``,
|
||||
``security_sctp_assoc_request()``, ``security_inet_conn_established()`` when
|
||||
``security_sctp_assoc_request()``, ``security_sctp_assoc_established()`` when
|
||||
establishing an association.
|
||||
::
|
||||
|
||||
@@ -151,9 +149,9 @@ establishing an association.
|
||||
INIT --------------------------------------------->
|
||||
sctp_sf_do_5_1B_init()
|
||||
Respond to an INIT chunk.
|
||||
SCTP peer endpoint "A" is
|
||||
asking for an association. Call
|
||||
security_sctp_assoc_request()
|
||||
SCTP peer endpoint "A" is asking
|
||||
for a temporary association.
|
||||
Call security_sctp_assoc_request()
|
||||
to set the peer label if first
|
||||
association.
|
||||
If not first association, check
|
||||
@@ -163,13 +161,16 @@ establishing an association.
|
||||
| discard the packet.
|
||||
|
|
||||
COOKIE ECHO ------------------------------------------>
|
||||
|
|
||||
|
|
||||
|
|
||||
sctp_sf_do_5_1D_ce()
|
||||
Respond to an COOKIE ECHO chunk.
|
||||
Confirm the cookie and create a
|
||||
permanent association.
|
||||
Call security_sctp_assoc_request() to
|
||||
do the same as for INIT chunk Response.
|
||||
<------------------------------------------- COOKIE ACK
|
||||
| |
|
||||
sctp_sf_do_5_1E_ca |
|
||||
Call security_inet_conn_established() |
|
||||
Call security_sctp_assoc_established() |
|
||||
to set the peer label. |
|
||||
| |
|
||||
| If SCTP_SOCKET_TCP or peeled off
|
||||
@@ -195,27 +196,27 @@ hooks with the SELinux specifics expanded below::
|
||||
security_sctp_assoc_request()
|
||||
security_sctp_bind_connect()
|
||||
security_sctp_sk_clone()
|
||||
security_inet_conn_established()
|
||||
security_sctp_assoc_established()
|
||||
|
||||
|
||||
security_sctp_assoc_request()
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Passes the ``@ep`` and ``@chunk->skb`` of the association INIT packet to the
|
||||
Passes the ``@asoc`` and ``@chunk->skb`` of the association INIT packet to the
|
||||
security module. Returns 0 on success, error on failure.
|
||||
::
|
||||
|
||||
@ep - pointer to sctp endpoint structure.
|
||||
@asoc - pointer to sctp association structure.
|
||||
@skb - pointer to skbuff of association packet.
|
||||
|
||||
The security module performs the following operations:
|
||||
IF this is the first association on ``@ep->base.sk``, then set the peer
|
||||
IF this is the first association on ``@asoc->base.sk``, then set the peer
|
||||
sid to that in ``@skb``. This will ensure there is only one peer sid
|
||||
assigned to ``@ep->base.sk`` that may support multiple associations.
|
||||
assigned to ``@asoc->base.sk`` that may support multiple associations.
|
||||
|
||||
ELSE validate the ``@ep->base.sk peer_sid`` against the ``@skb peer sid``
|
||||
ELSE validate the ``@asoc->base.sk peer_sid`` against the ``@skb peer sid``
|
||||
to determine whether the association should be allowed or denied.
|
||||
|
||||
Set the sctp ``@ep sid`` to socket's sid (from ``ep->base.sk``) with
|
||||
Set the sctp ``@asoc sid`` to socket's sid (from ``asoc->base.sk``) with
|
||||
MLS portion taken from ``@skb peer sid``. This will be used by SCTP
|
||||
TCP style sockets and peeled off connections as they cause a new socket
|
||||
to be generated.
|
||||
@@ -259,21 +260,21 @@ security_sctp_sk_clone()
|
||||
Called whenever a new socket is created by **accept**\(2) (i.e. a TCP style
|
||||
socket) or when a socket is 'peeled off' e.g userspace calls
|
||||
**sctp_peeloff**\(3). ``security_sctp_sk_clone()`` will set the new
|
||||
sockets sid and peer sid to that contained in the ``@ep sid`` and
|
||||
``@ep peer sid`` respectively.
|
||||
sockets sid and peer sid to that contained in the ``@asoc sid`` and
|
||||
``@asoc peer sid`` respectively.
|
||||
::
|
||||
|
||||
@ep - pointer to current sctp endpoint structure.
|
||||
@asoc - pointer to current sctp association structure.
|
||||
@sk - pointer to current sock structure.
|
||||
@sk - pointer to new sock structure.
|
||||
@newsk - pointer to new sock structure.
|
||||
|
||||
|
||||
security_inet_conn_established()
|
||||
security_sctp_assoc_established()
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Called when a COOKIE ACK is received where it sets the connection's peer sid
|
||||
to that in ``@skb``::
|
||||
|
||||
@sk - pointer to sock structure.
|
||||
@asoc - pointer to sctp association structure.
|
||||
@skb - pointer to skbuff of the COOKIE ACK packet.
|
||||
|
||||
|
||||
|
||||
@@ -872,9 +872,10 @@ F: Documentation/devicetree/bindings/thermal/amazon,al-thermal.txt
|
||||
F: drivers/thermal/thermal_mmio.c
|
||||
|
||||
AMAZON ETHERNET DRIVERS
|
||||
M: Netanel Belgazal <netanel@amazon.com>
|
||||
M: Shay Agroskin <shayagr@amazon.com>
|
||||
M: Arthur Kiyanovski <akiyano@amazon.com>
|
||||
R: Guy Tzalik <gtzalik@amazon.com>
|
||||
R: David Arinzon <darinzon@amazon.com>
|
||||
R: Noam Dagan <ndagan@amazon.com>
|
||||
R: Saeed Bishara <saeedb@amazon.com>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Supported
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
#include <linux/module.h>
|
||||
#include <linux/uaccess.h>
|
||||
|
||||
#ifdef CONFIG_BPF_JIT
|
||||
#if defined(CONFIG_BPF_JIT) && defined(CONFIG_ARCH_RV64I)
|
||||
int rv_bpf_fixup_exception(const struct exception_table_entry *ex, struct pt_regs *regs);
|
||||
#endif
|
||||
|
||||
@@ -23,7 +23,7 @@ int fixup_exception(struct pt_regs *regs)
|
||||
if (!fixup)
|
||||
return 0;
|
||||
|
||||
#ifdef CONFIG_BPF_JIT
|
||||
#if defined(CONFIG_BPF_JIT) && defined(CONFIG_ARCH_RV64I)
|
||||
if (regs->epc >= BPF_JIT_REGION_START && regs->epc < BPF_JIT_REGION_END)
|
||||
return rv_bpf_fixup_exception(fixup, regs);
|
||||
#endif
|
||||
|
||||
@@ -459,6 +459,8 @@ static int emit_call(bool fixed, u64 addr, struct rv_jit_context *ctx)
|
||||
#define BPF_FIXUP_OFFSET_MASK GENMASK(26, 0)
|
||||
#define BPF_FIXUP_REG_MASK GENMASK(31, 27)
|
||||
|
||||
int rv_bpf_fixup_exception(const struct exception_table_entry *ex,
|
||||
struct pt_regs *regs);
|
||||
int rv_bpf_fixup_exception(const struct exception_table_entry *ex,
|
||||
struct pt_regs *regs)
|
||||
{
|
||||
|
||||
@@ -294,6 +294,7 @@ config GTP
|
||||
config AMT
|
||||
tristate "Automatic Multicast Tunneling (AMT)"
|
||||
depends on INET && IP_MULTICAST
|
||||
depends on IPV6 || !IPV6
|
||||
select NET_UDP_TUNNEL
|
||||
help
|
||||
This allows one to create AMT(Automatic Multicast Tunneling)
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
#include <linux/igmp.h>
|
||||
#include <linux/workqueue.h>
|
||||
#include <net/net_namespace.h>
|
||||
#include <net/protocol.h>
|
||||
#include <net/ip.h>
|
||||
#include <net/udp.h>
|
||||
#include <net/udp_tunnel.h>
|
||||
@@ -23,7 +22,6 @@
|
||||
#include <linux/security.h>
|
||||
#include <net/gro_cells.h>
|
||||
#include <net/ipv6.h>
|
||||
#include <net/protocol.h>
|
||||
#include <net/if_inet6.h>
|
||||
#include <net/ndisc.h>
|
||||
#include <net/addrconf.h>
|
||||
@@ -2767,7 +2765,7 @@ static int amt_err_lookup(struct sock *sk, struct sk_buff *skb)
|
||||
rcu_read_lock_bh();
|
||||
amt = rcu_dereference_sk_user_data(sk);
|
||||
if (!amt)
|
||||
goto drop;
|
||||
goto out;
|
||||
|
||||
if (amt->mode != AMT_MODE_GATEWAY)
|
||||
goto drop;
|
||||
@@ -2789,6 +2787,7 @@ static int amt_err_lookup(struct sock *sk, struct sk_buff *skb)
|
||||
default:
|
||||
goto drop;
|
||||
}
|
||||
out:
|
||||
rcu_read_unlock_bh();
|
||||
return 0;
|
||||
drop:
|
||||
@@ -3259,8 +3258,10 @@ static int __init amt_init(void)
|
||||
goto unregister_notifier;
|
||||
|
||||
amt_wq = alloc_workqueue("amt", WQ_UNBOUND, 1);
|
||||
if (!amt_wq)
|
||||
if (!amt_wq) {
|
||||
err = -ENOMEM;
|
||||
goto rtnl_unregister;
|
||||
}
|
||||
|
||||
spin_lock_init(&source_gc_lock);
|
||||
spin_lock_bh(&source_gc_lock);
|
||||
@@ -3285,7 +3286,7 @@ static void __exit amt_fini(void)
|
||||
{
|
||||
rtnl_link_unregister(&amt_link_ops);
|
||||
unregister_netdevice_notifier(&amt_notifier_block);
|
||||
flush_delayed_work(&source_gc_wq);
|
||||
cancel_delayed_work(&source_gc_wq);
|
||||
__amt_source_gc_work();
|
||||
destroy_workqueue(amt_wq);
|
||||
}
|
||||
|
||||
@@ -108,15 +108,15 @@ static ssize_t ad_partner_oper_port_state_show(struct slave *slave, char *buf)
|
||||
}
|
||||
static SLAVE_ATTR_RO(ad_partner_oper_port_state);
|
||||
|
||||
static const struct slave_attribute *slave_attrs[] = {
|
||||
&slave_attr_state,
|
||||
&slave_attr_mii_status,
|
||||
&slave_attr_link_failure_count,
|
||||
&slave_attr_perm_hwaddr,
|
||||
&slave_attr_queue_id,
|
||||
&slave_attr_ad_aggregator_id,
|
||||
&slave_attr_ad_actor_oper_port_state,
|
||||
&slave_attr_ad_partner_oper_port_state,
|
||||
static const struct attribute *slave_attrs[] = {
|
||||
&slave_attr_state.attr,
|
||||
&slave_attr_mii_status.attr,
|
||||
&slave_attr_link_failure_count.attr,
|
||||
&slave_attr_perm_hwaddr.attr,
|
||||
&slave_attr_queue_id.attr,
|
||||
&slave_attr_ad_aggregator_id.attr,
|
||||
&slave_attr_ad_actor_oper_port_state.attr,
|
||||
&slave_attr_ad_partner_oper_port_state.attr,
|
||||
NULL
|
||||
};
|
||||
|
||||
@@ -137,24 +137,10 @@ const struct sysfs_ops slave_sysfs_ops = {
|
||||
|
||||
int bond_sysfs_slave_add(struct slave *slave)
|
||||
{
|
||||
const struct slave_attribute **a;
|
||||
int err;
|
||||
|
||||
for (a = slave_attrs; *a; ++a) {
|
||||
err = sysfs_create_file(&slave->kobj, &((*a)->attr));
|
||||
if (err) {
|
||||
kobject_put(&slave->kobj);
|
||||
return err;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
return sysfs_create_files(&slave->kobj, slave_attrs);
|
||||
}
|
||||
|
||||
void bond_sysfs_slave_del(struct slave *slave)
|
||||
{
|
||||
const struct slave_attribute **a;
|
||||
|
||||
for (a = slave_attrs; *a; ++a)
|
||||
sysfs_remove_file(&slave->kobj, &((*a)->attr));
|
||||
sysfs_remove_files(&slave->kobj, slave_attrs);
|
||||
}
|
||||
|
||||
@@ -1092,7 +1092,7 @@ static int mcp251xfd_chip_start(struct mcp251xfd_priv *priv)
|
||||
|
||||
err = mcp251xfd_chip_rx_int_enable(priv);
|
||||
if (err)
|
||||
return err;
|
||||
goto out_chip_stop;
|
||||
|
||||
err = mcp251xfd_chip_ecc_init(priv);
|
||||
if (err)
|
||||
@@ -2290,8 +2290,10 @@ static irqreturn_t mcp251xfd_irq(int irq, void *dev_id)
|
||||
* check will fail, too. So leave IRQ handler
|
||||
* directly.
|
||||
*/
|
||||
if (priv->can.state == CAN_STATE_BUS_OFF)
|
||||
if (priv->can.state == CAN_STATE_BUS_OFF) {
|
||||
can_rx_offload_threaded_irq_finish(&priv->offload);
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
}
|
||||
|
||||
handled = IRQ_HANDLED;
|
||||
|
||||
@@ -664,7 +664,7 @@ int es58x_rx_err_msg(struct net_device *netdev, enum es58x_err error,
|
||||
struct can_device_stats *can_stats = &can->can_stats;
|
||||
struct can_frame *cf = NULL;
|
||||
struct sk_buff *skb;
|
||||
int ret;
|
||||
int ret = 0;
|
||||
|
||||
if (!netif_running(netdev)) {
|
||||
if (net_ratelimit())
|
||||
@@ -823,8 +823,6 @@ int es58x_rx_err_msg(struct net_device *netdev, enum es58x_err error,
|
||||
can->state = CAN_STATE_BUS_OFF;
|
||||
can_bus_off(netdev);
|
||||
ret = can->do_set_mode(netdev, CAN_MODE_STOP);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -881,7 +879,7 @@ int es58x_rx_err_msg(struct net_device *netdev, enum es58x_err error,
|
||||
ES58X_EVENT_BUSOFF, timestamp);
|
||||
}
|
||||
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -841,14 +841,14 @@ static int pcan_usb_start(struct peak_usb_device *dev)
|
||||
pdev->bec.rxerr = 0;
|
||||
pdev->bec.txerr = 0;
|
||||
|
||||
/* be notified on error counter changes (if requested by user) */
|
||||
if (dev->can.ctrlmode & CAN_CTRLMODE_BERR_REPORTING) {
|
||||
err = pcan_usb_set_err_frame(dev, PCAN_USB_BERR_MASK);
|
||||
if (err)
|
||||
netdev_warn(dev->netdev,
|
||||
"Asking for BERR reporting error %u\n",
|
||||
err);
|
||||
}
|
||||
/* always ask the device for BERR reporting, to be able to switch from
|
||||
* WARNING to PASSIVE state
|
||||
*/
|
||||
err = pcan_usb_set_err_frame(dev, PCAN_USB_BERR_MASK);
|
||||
if (err)
|
||||
netdev_warn(dev->netdev,
|
||||
"Asking for BERR reporting error %u\n",
|
||||
err);
|
||||
|
||||
/* if revision greater than 3, can put silent mode on/off */
|
||||
if (dev->device_rev > 3) {
|
||||
@@ -883,6 +883,11 @@ static int pcan_usb_init(struct peak_usb_device *dev)
|
||||
return err;
|
||||
}
|
||||
|
||||
dev_info(dev->netdev->dev.parent,
|
||||
"PEAK-System %s adapter hwrev %u serial %08X (%u channel)\n",
|
||||
pcan_usb.name, dev->device_rev, serial_number,
|
||||
pcan_usb.ctrl_count);
|
||||
|
||||
/* Since rev 4.1, PCAN-USB is able to make single-shot as well as
|
||||
* looped back frames.
|
||||
*/
|
||||
@@ -896,11 +901,6 @@ static int pcan_usb_init(struct peak_usb_device *dev)
|
||||
"Firmware update available. Please contact support@peak-system.com\n");
|
||||
}
|
||||
|
||||
dev_info(dev->netdev->dev.parent,
|
||||
"PEAK-System %s adapter hwrev %u serial %08X (%u channel)\n",
|
||||
pcan_usb.name, dev->device_rev, serial_number,
|
||||
pcan_usb.ctrl_count);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -986,7 +986,6 @@ const struct peak_usb_adapter pcan_usb = {
|
||||
.device_id = PCAN_USB_PRODUCT_ID,
|
||||
.ctrl_count = 1,
|
||||
.ctrlmode_supported = CAN_CTRLMODE_3_SAMPLES | CAN_CTRLMODE_LISTENONLY |
|
||||
CAN_CTRLMODE_BERR_REPORTING |
|
||||
CAN_CTRLMODE_CC_LEN8_DLC,
|
||||
.clock = {
|
||||
.freq = PCAN_USB_CRYSTAL_HZ / 2,
|
||||
|
||||
@@ -640,7 +640,10 @@ static void mv88e6393x_phylink_validate(struct mv88e6xxx_chip *chip, int port,
|
||||
unsigned long *mask,
|
||||
struct phylink_link_state *state)
|
||||
{
|
||||
if (port == 0 || port == 9 || port == 10) {
|
||||
bool is_6191x =
|
||||
chip->info->prod_num == MV88E6XXX_PORT_SWITCH_ID_PROD_6191X;
|
||||
|
||||
if (((port == 0 || port == 9) && !is_6191x) || port == 10) {
|
||||
phylink_set(mask, 10000baseT_Full);
|
||||
phylink_set(mask, 10000baseKR_Full);
|
||||
phylink_set(mask, 10000baseCR_Full);
|
||||
|
||||
@@ -1370,12 +1370,12 @@ out:
|
||||
static bool felix_rxtstamp(struct dsa_switch *ds, int port,
|
||||
struct sk_buff *skb, unsigned int type)
|
||||
{
|
||||
u8 *extraction = skb->data - ETH_HLEN - OCELOT_TAG_LEN;
|
||||
u32 tstamp_lo = OCELOT_SKB_CB(skb)->tstamp_lo;
|
||||
struct skb_shared_hwtstamps *shhwtstamps;
|
||||
struct ocelot *ocelot = ds->priv;
|
||||
u32 tstamp_lo, tstamp_hi;
|
||||
struct timespec64 ts;
|
||||
u64 tstamp, val;
|
||||
u32 tstamp_hi;
|
||||
u64 tstamp;
|
||||
|
||||
/* If the "no XTR IRQ" workaround is in use, tell DSA to defer this skb
|
||||
* for RX timestamping. Then free it, and poll for its copy through
|
||||
@@ -1390,9 +1390,6 @@ static bool felix_rxtstamp(struct dsa_switch *ds, int port,
|
||||
ocelot_ptp_gettime64(&ocelot->ptp_info, &ts);
|
||||
tstamp = ktime_set(ts.tv_sec, ts.tv_nsec);
|
||||
|
||||
ocelot_xfh_get_rew_val(extraction, &val);
|
||||
tstamp_lo = (u32)val;
|
||||
|
||||
tstamp_hi = tstamp >> 32;
|
||||
if ((tstamp & 0xffffffff) < tstamp_lo)
|
||||
tstamp_hi--;
|
||||
|
||||
@@ -1109,6 +1109,14 @@ qca8k_setup(struct dsa_switch *ds)
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* Make sure MAC06 is disabled */
|
||||
ret = qca8k_reg_clear(priv, QCA8K_REG_PORT0_PAD_CTRL,
|
||||
QCA8K_PORT0_PAD_MAC06_EXCHANGE_EN);
|
||||
if (ret) {
|
||||
dev_err(priv->dev, "failed disabling MAC06 exchange");
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Enable CPU Port */
|
||||
ret = qca8k_reg_set(priv, QCA8K_REG_GLOBAL_FW_CTRL0,
|
||||
QCA8K_GLOBAL_FW_CTRL0_CPU_PORT_EN);
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
#define QCA8K_MASK_CTRL_DEVICE_ID_MASK GENMASK(15, 8)
|
||||
#define QCA8K_MASK_CTRL_DEVICE_ID(x) ((x) >> 8)
|
||||
#define QCA8K_REG_PORT0_PAD_CTRL 0x004
|
||||
#define QCA8K_PORT0_PAD_MAC06_EXCHANGE_EN BIT(31)
|
||||
#define QCA8K_PORT0_PAD_SGMII_RXCLK_FALLING_EDGE BIT(19)
|
||||
#define QCA8K_PORT0_PAD_SGMII_TXCLK_FALLING_EDGE BIT(18)
|
||||
#define QCA8K_REG_PORT5_PAD_CTRL 0x008
|
||||
|
||||
@@ -934,7 +934,7 @@ static const struct net_device_ops ax88796c_netdev_ops = {
|
||||
.ndo_stop = ax88796c_close,
|
||||
.ndo_start_xmit = ax88796c_start_xmit,
|
||||
.ndo_get_stats64 = ax88796c_get_stats64,
|
||||
.ndo_do_ioctl = ax88796c_ioctl,
|
||||
.ndo_eth_ioctl = ax88796c_ioctl,
|
||||
.ndo_set_mac_address = eth_mac_addr,
|
||||
.ndo_set_features = ax88796c_set_features,
|
||||
};
|
||||
@@ -1114,11 +1114,13 @@ static int ax88796c_remove(struct spi_device *spi)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_OF
|
||||
static const struct of_device_id ax88796c_dt_ids[] = {
|
||||
{ .compatible = "asix,ax88796c" },
|
||||
{},
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, ax88796c_dt_ids);
|
||||
#endif
|
||||
|
||||
static const struct spi_device_id asix_id[] = {
|
||||
{ "ax88796c", 0 },
|
||||
|
||||
@@ -443,7 +443,7 @@ static int bnxt_dl_reload_down(struct devlink *dl, bool netns_change,
|
||||
case DEVLINK_RELOAD_ACTION_DRIVER_REINIT: {
|
||||
if (BNXT_PF(bp) && bp->pf.active_vfs) {
|
||||
NL_SET_ERR_MSG_MOD(extack,
|
||||
"reload is unsupported when VFs are allocated\n");
|
||||
"reload is unsupported when VFs are allocated");
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
rtnl_lock();
|
||||
|
||||
@@ -5503,7 +5503,6 @@ static bool tg3_setup_fiber_hw_autoneg(struct tg3 *tp, u32 mac_status)
|
||||
int workaround, port_a;
|
||||
|
||||
serdes_cfg = 0;
|
||||
expected_sg_dig_ctrl = 0;
|
||||
workaround = 0;
|
||||
port_a = 1;
|
||||
current_link_up = false;
|
||||
|
||||
@@ -2015,12 +2015,15 @@ static int cxgb4_get_module_info(struct net_device *dev,
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (!sff8472_comp || (sff_diag_type & 4)) {
|
||||
if (!sff8472_comp || (sff_diag_type & SFP_DIAG_ADDRMODE)) {
|
||||
modinfo->type = ETH_MODULE_SFF_8079;
|
||||
modinfo->eeprom_len = ETH_MODULE_SFF_8079_LEN;
|
||||
} else {
|
||||
modinfo->type = ETH_MODULE_SFF_8472;
|
||||
modinfo->eeprom_len = ETH_MODULE_SFF_8472_LEN;
|
||||
if (sff_diag_type & SFP_DIAG_IMPLEMENTED)
|
||||
modinfo->eeprom_len = ETH_MODULE_SFF_8472_LEN;
|
||||
else
|
||||
modinfo->eeprom_len = ETH_MODULE_SFF_8472_LEN / 2;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
@@ -293,6 +293,8 @@ enum {
|
||||
#define I2C_PAGE_SIZE 0x100
|
||||
#define SFP_DIAG_TYPE_ADDR 0x5c
|
||||
#define SFP_DIAG_TYPE_LEN 0x1
|
||||
#define SFP_DIAG_ADDRMODE BIT(2)
|
||||
#define SFP_DIAG_IMPLEMENTED BIT(6)
|
||||
#define SFF_8472_COMP_ADDR 0x5e
|
||||
#define SFF_8472_COMP_LEN 0x1
|
||||
#define SFF_REV_ADDR 0x1
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user