Merge 0e91c4b484
("net: dsa: b53: fix jumbo frames on 10/100 ports") into android12-5.10-lts
Steps on the way to 5.10.227 Change-Id: Icd295683946d347d25cacf37500bb3031ef41621 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
commit
ca21e0d3a8
@ -27,6 +27,7 @@
|
||||
#include <linux/phylink.h>
|
||||
#include <linux/etherdevice.h>
|
||||
#include <linux/if_bridge.h>
|
||||
#include <linux/if_vlan.h>
|
||||
#include <net/dsa.h>
|
||||
|
||||
#include "b53_regs.h"
|
||||
@ -224,6 +225,9 @@ static const struct b53_mib_desc b53_mibs_58xx[] = {
|
||||
|
||||
#define B53_MIBS_58XX_SIZE ARRAY_SIZE(b53_mibs_58xx)
|
||||
|
||||
#define B53_MAX_MTU_25 (1536 - ETH_HLEN - VLAN_HLEN - ETH_FCS_LEN)
|
||||
#define B53_MAX_MTU (9720 - ETH_HLEN - VLAN_HLEN - ETH_FCS_LEN)
|
||||
|
||||
static int b53_do_vlan_op(struct b53_device *dev, u8 op)
|
||||
{
|
||||
unsigned int i;
|
||||
@ -2178,20 +2182,25 @@ static int b53_change_mtu(struct dsa_switch *ds, int port, int mtu)
|
||||
bool allow_10_100;
|
||||
|
||||
if (is5325(dev) || is5365(dev))
|
||||
return -EOPNOTSUPP;
|
||||
return 0;
|
||||
|
||||
if (!dsa_is_cpu_port(ds, port))
|
||||
return 0;
|
||||
|
||||
enable_jumbo = (mtu >= JMS_MIN_SIZE);
|
||||
allow_10_100 = (dev->chip_id == BCM583XX_DEVICE_ID);
|
||||
enable_jumbo = (mtu > ETH_DATA_LEN);
|
||||
allow_10_100 = !is63xx(dev);
|
||||
|
||||
return b53_set_jumbo(dev, enable_jumbo, allow_10_100);
|
||||
}
|
||||
|
||||
static int b53_get_max_mtu(struct dsa_switch *ds, int port)
|
||||
{
|
||||
return JMS_MAX_SIZE;
|
||||
struct b53_device *dev = ds->priv;
|
||||
|
||||
if (is5325(dev) || is5365(dev))
|
||||
return B53_MAX_MTU_25;
|
||||
|
||||
return B53_MAX_MTU;
|
||||
}
|
||||
|
||||
static const struct dsa_switch_ops b53_switch_ops = {
|
||||
|
@ -120,7 +120,7 @@ static int bcm84881_aneg_done(struct phy_device *phydev)
|
||||
|
||||
bmsr = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_C22 + MII_BMSR);
|
||||
if (bmsr < 0)
|
||||
return val;
|
||||
return bmsr;
|
||||
|
||||
return !!(val & MDIO_AN_STAT1_COMPLETE) &&
|
||||
!!(bmsr & BMSR_ANEGCOMPLETE);
|
||||
@ -146,7 +146,7 @@ static int bcm84881_read_status(struct phy_device *phydev)
|
||||
|
||||
bmsr = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_AN_C22 + MII_BMSR);
|
||||
if (bmsr < 0)
|
||||
return val;
|
||||
return bmsr;
|
||||
|
||||
phydev->autoneg_complete = !!(val & MDIO_AN_STAT1_COMPLETE) &&
|
||||
!!(bmsr & BMSR_ANEGCOMPLETE);
|
||||
|
@ -871,9 +871,7 @@ static int rfcomm_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned lon
|
||||
|
||||
if (err == -ENOIOCTLCMD) {
|
||||
#ifdef CONFIG_BT_RFCOMM_TTY
|
||||
lock_sock(sk);
|
||||
err = rfcomm_dev_ioctl(sk, cmd, (void __user *) arg);
|
||||
release_sock(sk);
|
||||
#else
|
||||
err = -EOPNOTSUPP;
|
||||
#endif
|
||||
|
@ -33,6 +33,7 @@
|
||||
#include <net/ip.h>
|
||||
#include <net/ipv6.h>
|
||||
#include <net/addrconf.h>
|
||||
#include <net/dst_metadata.h>
|
||||
#include <net/route.h>
|
||||
#include <net/netfilter/br_netfilter.h>
|
||||
#include <net/netns/generic.h>
|
||||
@ -753,6 +754,10 @@ static int br_nf_dev_queue_xmit(struct net *net, struct sock *sk, struct sk_buff
|
||||
return br_dev_queue_push_xmit(net, sk, skb);
|
||||
}
|
||||
|
||||
/* Fragmentation on metadata/template dst is not supported */
|
||||
if (unlikely(!skb_valid_dst(skb)))
|
||||
goto drop;
|
||||
|
||||
/* This is wrong! We should preserve the original fragment
|
||||
* boundaries by preserving frag_list rather than refragmenting.
|
||||
*/
|
||||
|
@ -2424,8 +2424,22 @@ static bool tcp_skb_spurious_retrans(const struct tcp_sock *tp,
|
||||
*/
|
||||
static inline bool tcp_packet_delayed(const struct tcp_sock *tp)
|
||||
{
|
||||
return tp->retrans_stamp &&
|
||||
tcp_tsopt_ecr_before(tp, tp->retrans_stamp);
|
||||
const struct sock *sk = (const struct sock *)tp;
|
||||
|
||||
if (tp->retrans_stamp &&
|
||||
tcp_tsopt_ecr_before(tp, tp->retrans_stamp))
|
||||
return true; /* got echoed TS before first retransmission */
|
||||
|
||||
/* Check if nothing was retransmitted (retrans_stamp==0), which may
|
||||
* happen in fast recovery due to TSQ. But we ignore zero retrans_stamp
|
||||
* in TCP_SYN_SENT, since when we set FLAG_SYN_ACKED we also clear
|
||||
* retrans_stamp even if we had retransmitted the SYN.
|
||||
*/
|
||||
if (!tp->retrans_stamp && /* no record of a retransmit/SYN? */
|
||||
sk->sk_state != TCP_SYN_SENT) /* not the FLAG_SYN_ACKED case? */
|
||||
return true; /* nothing was retransmitted */
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Undo procedures. */
|
||||
@ -2459,6 +2473,16 @@ static bool tcp_any_retrans_done(const struct sock *sk)
|
||||
return false;
|
||||
}
|
||||
|
||||
/* If loss recovery is finished and there are no retransmits out in the
|
||||
* network, then we clear retrans_stamp so that upon the next loss recovery
|
||||
* retransmits_timed_out() and timestamp-undo are using the correct value.
|
||||
*/
|
||||
static void tcp_retrans_stamp_cleanup(struct sock *sk)
|
||||
{
|
||||
if (!tcp_any_retrans_done(sk))
|
||||
tcp_sk(sk)->retrans_stamp = 0;
|
||||
}
|
||||
|
||||
static void DBGUNDO(struct sock *sk, const char *msg)
|
||||
{
|
||||
#if FASTRETRANS_DEBUG > 1
|
||||
@ -2795,6 +2819,9 @@ void tcp_enter_recovery(struct sock *sk, bool ece_ack)
|
||||
struct tcp_sock *tp = tcp_sk(sk);
|
||||
int mib_idx;
|
||||
|
||||
/* Start the clock with our fast retransmit, for undo and ETIMEDOUT. */
|
||||
tcp_retrans_stamp_cleanup(sk);
|
||||
|
||||
if (tcp_is_reno(tp))
|
||||
mib_idx = LINUX_MIB_TCPRENORECOVERY;
|
||||
else
|
||||
|
Loading…
Reference in New Issue
Block a user