Import of kernel-5.14.0-611.36.1.el9_7
This commit is contained in:
parent
8be83e79c4
commit
39d42eb2b3
@ -446,6 +446,16 @@ attribute-sets:
|
||||
doc: |
|
||||
Granularity of phase adjustment, in picoseconds. The value of
|
||||
phase adjustment must be a multiple of this granularity.
|
||||
-
|
||||
name: fractional-frequency-offset-ppt
|
||||
type: sint
|
||||
doc: |
|
||||
The FFO (Fractional Frequency Offset) of the pin with respect to
|
||||
the nominal frequency.
|
||||
Value = (frequency_measured - frequency_nominal) / frequency_nominal
|
||||
Value is in PPT (parts per trillion, 10^-12).
|
||||
Note: This attribute provides higher resolution than the standard
|
||||
fractional-frequency-offset (which is in PPM).
|
||||
|
||||
-
|
||||
name: pin-parent-device
|
||||
@ -550,6 +560,7 @@ operations:
|
||||
request:
|
||||
attributes:
|
||||
- id
|
||||
- mode
|
||||
- phase-offset-monitor
|
||||
- phase-offset-avg-factor
|
||||
-
|
||||
@ -627,6 +638,7 @@ operations:
|
||||
- phase-adjust-max
|
||||
- phase-adjust
|
||||
- fractional-frequency-offset
|
||||
- fractional-frequency-offset-ppt
|
||||
- esync-frequency
|
||||
- esync-frequency-supported
|
||||
- esync-pulse
|
||||
|
||||
@ -15,7 +15,7 @@ kernel-policy: global
|
||||
definitions:
|
||||
-
|
||||
type: enum
|
||||
name: encap_type
|
||||
name: encap-type
|
||||
name-prefix: fou-encap-
|
||||
enum-name:
|
||||
entries: [ unspec, direct, gue ]
|
||||
@ -39,30 +39,32 @@ attribute-sets:
|
||||
-
|
||||
name: ipproto
|
||||
type: u8
|
||||
checks:
|
||||
min: 1
|
||||
-
|
||||
name: type
|
||||
type: u8
|
||||
-
|
||||
name: remcsum_nopartial
|
||||
name: remcsum-nopartial
|
||||
type: flag
|
||||
-
|
||||
name: local_v4
|
||||
name: local-v4
|
||||
type: u32
|
||||
-
|
||||
name: local_v6
|
||||
name: local-v6
|
||||
type: binary
|
||||
checks:
|
||||
min-len: 16
|
||||
-
|
||||
name: peer_v4
|
||||
name: peer-v4
|
||||
type: u32
|
||||
-
|
||||
name: peer_v6
|
||||
name: peer-v6
|
||||
type: binary
|
||||
checks:
|
||||
min-len: 16
|
||||
-
|
||||
name: peer_port
|
||||
name: peer-port
|
||||
type: u16
|
||||
byte-order: big-endian
|
||||
-
|
||||
@ -90,12 +92,12 @@ operations:
|
||||
- port
|
||||
- ipproto
|
||||
- type
|
||||
- remcsum_nopartial
|
||||
- local_v4
|
||||
- peer_v4
|
||||
- local_v6
|
||||
- peer_v6
|
||||
- peer_port
|
||||
- remcsum-nopartial
|
||||
- local-v4
|
||||
- peer-v4
|
||||
- local-v6
|
||||
- peer-v6
|
||||
- peer-port
|
||||
- ifindex
|
||||
|
||||
-
|
||||
@ -112,11 +114,11 @@ operations:
|
||||
- af
|
||||
- ifindex
|
||||
- port
|
||||
- peer_port
|
||||
- local_v4
|
||||
- peer_v4
|
||||
- local_v6
|
||||
- peer_v6
|
||||
- peer-port
|
||||
- local-v4
|
||||
- peer-v4
|
||||
- local-v6
|
||||
- peer-v6
|
||||
|
||||
-
|
||||
name: get
|
||||
|
||||
@ -12,7 +12,7 @@ RHEL_MINOR = 7
|
||||
#
|
||||
# Use this spot to avoid future merge conflicts.
|
||||
# Do not trim this comment.
|
||||
RHEL_RELEASE = 611.35.1
|
||||
RHEL_RELEASE = 611.36.1
|
||||
|
||||
#
|
||||
# ZSTREAM
|
||||
|
||||
@ -1103,17 +1103,15 @@ static inline pte_t pte_mkhuge(pte_t pte)
|
||||
#define IPTE_NODAT 0x400
|
||||
#define IPTE_GUEST_ASCE 0x800
|
||||
|
||||
static __always_inline void __ptep_rdp(unsigned long addr, pte_t *ptep,
|
||||
unsigned long opt, unsigned long asce,
|
||||
int local)
|
||||
static __always_inline void __ptep_rdp(unsigned long addr, pte_t *ptep, int local)
|
||||
{
|
||||
unsigned long pto;
|
||||
|
||||
pto = __pa(ptep) & ~(PTRS_PER_PTE * sizeof(pte_t) - 1);
|
||||
asm volatile(".insn rrf,0xb98b0000,%[r1],%[r2],%[asce],%[m4]"
|
||||
asm volatile(".insn rrf,0xb98b0000,%[r1],%[r2],%%r0,%[m4]"
|
||||
: "+m" (*ptep)
|
||||
: [r1] "a" (pto), [r2] "a" ((addr & PAGE_MASK) | opt),
|
||||
[asce] "a" (asce), [m4] "i" (local));
|
||||
: [r1] "a" (pto), [r2] "a" (addr & PAGE_MASK),
|
||||
[m4] "i" (local));
|
||||
}
|
||||
|
||||
static __always_inline void __ptep_ipte(unsigned long address, pte_t *ptep,
|
||||
@ -1297,7 +1295,7 @@ static inline void flush_tlb_fix_spurious_fault(struct vm_area_struct *vma,
|
||||
* A local RDP can be used to do the flush.
|
||||
*/
|
||||
if (MACHINE_HAS_RDP && !(pte_val(*ptep) & _PAGE_PROTECT))
|
||||
__ptep_rdp(address, ptep, 0, 0, 1);
|
||||
__ptep_rdp(address, ptep, 1);
|
||||
}
|
||||
#define flush_tlb_fix_spurious_fault flush_tlb_fix_spurious_fault
|
||||
|
||||
|
||||
@ -303,9 +303,9 @@ void ptep_reset_dat_prot(struct mm_struct *mm, unsigned long addr, pte_t *ptep,
|
||||
preempt_disable();
|
||||
atomic_inc(&mm->context.flush_count);
|
||||
if (cpumask_equal(mm_cpumask(mm), cpumask_of(smp_processor_id())))
|
||||
__ptep_rdp(addr, ptep, 0, 0, 1);
|
||||
__ptep_rdp(addr, ptep, 1);
|
||||
else
|
||||
__ptep_rdp(addr, ptep, 0, 0, 0);
|
||||
__ptep_rdp(addr, ptep, 0);
|
||||
/*
|
||||
* PTE is not invalidated by RDP, only _PAGE_PROTECT is cleared. That
|
||||
* means it is still valid and active, and must not be changed according
|
||||
|
||||
@ -1200,8 +1200,8 @@ CONFIG_IP_PIMSM_V2=y
|
||||
CONFIG_SYN_COOKIES=y
|
||||
CONFIG_NET_IPVTI=m
|
||||
CONFIG_NET_UDP_TUNNEL=m
|
||||
# CONFIG_NET_FOU is not set
|
||||
# CONFIG_NET_FOU_IP_TUNNELS is not set
|
||||
CONFIG_NET_FOU=m
|
||||
CONFIG_NET_FOU_IP_TUNNELS=y
|
||||
CONFIG_INET_AH=m
|
||||
CONFIG_INET_ESP=m
|
||||
CONFIG_INET_ESP_OFFLOAD=m
|
||||
@ -1254,6 +1254,8 @@ CONFIG_IPV6_SIT_6RD=y
|
||||
CONFIG_IPV6_NDISC_NODETYPE=y
|
||||
CONFIG_IPV6_TUNNEL=m
|
||||
CONFIG_IPV6_GRE=m
|
||||
CONFIG_IPV6_FOU=m
|
||||
CONFIG_IPV6_FOU_TUNNEL=m
|
||||
CONFIG_IPV6_MULTIPLE_TABLES=y
|
||||
# CONFIG_IPV6_SUBTREES is not set
|
||||
CONFIG_IPV6_MROUTE=y
|
||||
|
||||
@ -1196,8 +1196,8 @@ CONFIG_IP_PIMSM_V2=y
|
||||
CONFIG_SYN_COOKIES=y
|
||||
CONFIG_NET_IPVTI=m
|
||||
CONFIG_NET_UDP_TUNNEL=m
|
||||
# CONFIG_NET_FOU is not set
|
||||
# CONFIG_NET_FOU_IP_TUNNELS is not set
|
||||
CONFIG_NET_FOU=m
|
||||
CONFIG_NET_FOU_IP_TUNNELS=y
|
||||
CONFIG_INET_AH=m
|
||||
CONFIG_INET_ESP=m
|
||||
CONFIG_INET_ESP_OFFLOAD=m
|
||||
@ -1250,6 +1250,8 @@ CONFIG_IPV6_SIT_6RD=y
|
||||
CONFIG_IPV6_NDISC_NODETYPE=y
|
||||
CONFIG_IPV6_TUNNEL=m
|
||||
CONFIG_IPV6_GRE=m
|
||||
CONFIG_IPV6_FOU=m
|
||||
CONFIG_IPV6_FOU_TUNNEL=m
|
||||
CONFIG_IPV6_MULTIPLE_TABLES=y
|
||||
# CONFIG_IPV6_SUBTREES is not set
|
||||
CONFIG_IPV6_MROUTE=y
|
||||
|
||||
@ -1203,8 +1203,8 @@ CONFIG_IP_PIMSM_V2=y
|
||||
CONFIG_SYN_COOKIES=y
|
||||
CONFIG_NET_IPVTI=m
|
||||
CONFIG_NET_UDP_TUNNEL=m
|
||||
# CONFIG_NET_FOU is not set
|
||||
# CONFIG_NET_FOU_IP_TUNNELS is not set
|
||||
CONFIG_NET_FOU=m
|
||||
CONFIG_NET_FOU_IP_TUNNELS=y
|
||||
CONFIG_INET_AH=m
|
||||
CONFIG_INET_ESP=m
|
||||
CONFIG_INET_ESP_OFFLOAD=m
|
||||
@ -1257,6 +1257,8 @@ CONFIG_IPV6_SIT_6RD=y
|
||||
CONFIG_IPV6_NDISC_NODETYPE=y
|
||||
CONFIG_IPV6_TUNNEL=m
|
||||
CONFIG_IPV6_GRE=m
|
||||
CONFIG_IPV6_FOU=m
|
||||
CONFIG_IPV6_FOU_TUNNEL=m
|
||||
CONFIG_IPV6_MULTIPLE_TABLES=y
|
||||
# CONFIG_IPV6_SUBTREES is not set
|
||||
CONFIG_IPV6_MROUTE=y
|
||||
|
||||
@ -1197,8 +1197,8 @@ CONFIG_IP_PIMSM_V2=y
|
||||
CONFIG_SYN_COOKIES=y
|
||||
CONFIG_NET_IPVTI=m
|
||||
CONFIG_NET_UDP_TUNNEL=m
|
||||
# CONFIG_NET_FOU is not set
|
||||
# CONFIG_NET_FOU_IP_TUNNELS is not set
|
||||
CONFIG_NET_FOU=m
|
||||
CONFIG_NET_FOU_IP_TUNNELS=y
|
||||
CONFIG_INET_AH=m
|
||||
CONFIG_INET_ESP=m
|
||||
CONFIG_INET_ESP_OFFLOAD=m
|
||||
@ -1251,6 +1251,8 @@ CONFIG_IPV6_SIT_6RD=y
|
||||
CONFIG_IPV6_NDISC_NODETYPE=y
|
||||
CONFIG_IPV6_TUNNEL=m
|
||||
CONFIG_IPV6_GRE=m
|
||||
CONFIG_IPV6_FOU=m
|
||||
CONFIG_IPV6_FOU_TUNNEL=m
|
||||
CONFIG_IPV6_MULTIPLE_TABLES=y
|
||||
# CONFIG_IPV6_SUBTREES is not set
|
||||
CONFIG_IPV6_MROUTE=y
|
||||
|
||||
@ -1194,8 +1194,8 @@ CONFIG_IP_PIMSM_V2=y
|
||||
CONFIG_SYN_COOKIES=y
|
||||
CONFIG_NET_IPVTI=m
|
||||
CONFIG_NET_UDP_TUNNEL=m
|
||||
# CONFIG_NET_FOU is not set
|
||||
# CONFIG_NET_FOU_IP_TUNNELS is not set
|
||||
CONFIG_NET_FOU=m
|
||||
CONFIG_NET_FOU_IP_TUNNELS=y
|
||||
CONFIG_INET_AH=m
|
||||
CONFIG_INET_ESP=m
|
||||
CONFIG_INET_ESP_OFFLOAD=m
|
||||
@ -1248,6 +1248,8 @@ CONFIG_IPV6_SIT_6RD=y
|
||||
CONFIG_IPV6_NDISC_NODETYPE=y
|
||||
CONFIG_IPV6_TUNNEL=m
|
||||
CONFIG_IPV6_GRE=m
|
||||
CONFIG_IPV6_FOU=m
|
||||
CONFIG_IPV6_FOU_TUNNEL=m
|
||||
CONFIG_IPV6_MULTIPLE_TABLES=y
|
||||
# CONFIG_IPV6_SUBTREES is not set
|
||||
CONFIG_IPV6_MROUTE=y
|
||||
|
||||
@ -1198,8 +1198,8 @@ CONFIG_IP_PIMSM_V2=y
|
||||
CONFIG_SYN_COOKIES=y
|
||||
CONFIG_NET_IPVTI=m
|
||||
CONFIG_NET_UDP_TUNNEL=m
|
||||
# CONFIG_NET_FOU is not set
|
||||
# CONFIG_NET_FOU_IP_TUNNELS is not set
|
||||
CONFIG_NET_FOU=m
|
||||
CONFIG_NET_FOU_IP_TUNNELS=y
|
||||
CONFIG_INET_AH=m
|
||||
CONFIG_INET_ESP=m
|
||||
CONFIG_INET_ESP_OFFLOAD=m
|
||||
@ -1252,6 +1252,8 @@ CONFIG_IPV6_SIT_6RD=y
|
||||
CONFIG_IPV6_NDISC_NODETYPE=y
|
||||
CONFIG_IPV6_TUNNEL=m
|
||||
CONFIG_IPV6_GRE=m
|
||||
CONFIG_IPV6_FOU=m
|
||||
CONFIG_IPV6_FOU_TUNNEL=m
|
||||
CONFIG_IPV6_MULTIPLE_TABLES=y
|
||||
# CONFIG_IPV6_SUBTREES is not set
|
||||
CONFIG_IPV6_MROUTE=y
|
||||
|
||||
@ -1195,8 +1195,8 @@ CONFIG_IP_PIMSM_V2=y
|
||||
CONFIG_SYN_COOKIES=y
|
||||
CONFIG_NET_IPVTI=m
|
||||
CONFIG_NET_UDP_TUNNEL=m
|
||||
# CONFIG_NET_FOU is not set
|
||||
# CONFIG_NET_FOU_IP_TUNNELS is not set
|
||||
CONFIG_NET_FOU=m
|
||||
CONFIG_NET_FOU_IP_TUNNELS=y
|
||||
CONFIG_INET_AH=m
|
||||
CONFIG_INET_ESP=m
|
||||
CONFIG_INET_ESP_OFFLOAD=m
|
||||
@ -1249,6 +1249,8 @@ CONFIG_IPV6_SIT_6RD=y
|
||||
CONFIG_IPV6_NDISC_NODETYPE=y
|
||||
CONFIG_IPV6_TUNNEL=m
|
||||
CONFIG_IPV6_GRE=m
|
||||
CONFIG_IPV6_FOU=m
|
||||
CONFIG_IPV6_FOU_TUNNEL=m
|
||||
CONFIG_IPV6_MULTIPLE_TABLES=y
|
||||
# CONFIG_IPV6_SUBTREES is not set
|
||||
CONFIG_IPV6_MROUTE=y
|
||||
|
||||
@ -1199,8 +1199,8 @@ CONFIG_IP_PIMSM_V2=y
|
||||
CONFIG_SYN_COOKIES=y
|
||||
CONFIG_NET_IPVTI=m
|
||||
CONFIG_NET_UDP_TUNNEL=m
|
||||
# CONFIG_NET_FOU is not set
|
||||
# CONFIG_NET_FOU_IP_TUNNELS is not set
|
||||
CONFIG_NET_FOU=m
|
||||
CONFIG_NET_FOU_IP_TUNNELS=y
|
||||
CONFIG_INET_AH=m
|
||||
CONFIG_INET_ESP=m
|
||||
CONFIG_INET_ESP_OFFLOAD=m
|
||||
@ -1253,6 +1253,8 @@ CONFIG_IPV6_SIT_6RD=y
|
||||
CONFIG_IPV6_NDISC_NODETYPE=y
|
||||
CONFIG_IPV6_TUNNEL=m
|
||||
CONFIG_IPV6_GRE=m
|
||||
CONFIG_IPV6_FOU=m
|
||||
CONFIG_IPV6_FOU_TUNNEL=m
|
||||
CONFIG_IPV6_MULTIPLE_TABLES=y
|
||||
# CONFIG_IPV6_SUBTREES is not set
|
||||
CONFIG_IPV6_MROUTE=y
|
||||
|
||||
@ -966,8 +966,8 @@ CONFIG_IP_PIMSM_V2=y
|
||||
CONFIG_SYN_COOKIES=y
|
||||
CONFIG_NET_IPVTI=m
|
||||
CONFIG_NET_UDP_TUNNEL=m
|
||||
# CONFIG_NET_FOU is not set
|
||||
# CONFIG_NET_FOU_IP_TUNNELS is not set
|
||||
CONFIG_NET_FOU=m
|
||||
CONFIG_NET_FOU_IP_TUNNELS=y
|
||||
CONFIG_INET_AH=m
|
||||
CONFIG_INET_ESP=m
|
||||
CONFIG_INET_ESP_OFFLOAD=m
|
||||
@ -1020,6 +1020,8 @@ CONFIG_IPV6_SIT_6RD=y
|
||||
CONFIG_IPV6_NDISC_NODETYPE=y
|
||||
CONFIG_IPV6_TUNNEL=m
|
||||
CONFIG_IPV6_GRE=m
|
||||
CONFIG_IPV6_FOU=m
|
||||
CONFIG_IPV6_FOU_TUNNEL=m
|
||||
CONFIG_IPV6_MULTIPLE_TABLES=y
|
||||
# CONFIG_IPV6_SUBTREES is not set
|
||||
CONFIG_IPV6_MROUTE=y
|
||||
|
||||
@ -983,8 +983,8 @@ CONFIG_IP_PIMSM_V2=y
|
||||
CONFIG_SYN_COOKIES=y
|
||||
CONFIG_NET_IPVTI=m
|
||||
CONFIG_NET_UDP_TUNNEL=m
|
||||
# CONFIG_NET_FOU is not set
|
||||
# CONFIG_NET_FOU_IP_TUNNELS is not set
|
||||
CONFIG_NET_FOU=m
|
||||
CONFIG_NET_FOU_IP_TUNNELS=y
|
||||
CONFIG_INET_AH=m
|
||||
CONFIG_INET_ESP=m
|
||||
CONFIG_INET_ESP_OFFLOAD=m
|
||||
@ -1037,6 +1037,8 @@ CONFIG_IPV6_SIT_6RD=y
|
||||
CONFIG_IPV6_NDISC_NODETYPE=y
|
||||
CONFIG_IPV6_TUNNEL=m
|
||||
CONFIG_IPV6_GRE=m
|
||||
CONFIG_IPV6_FOU=m
|
||||
CONFIG_IPV6_FOU_TUNNEL=m
|
||||
CONFIG_IPV6_MULTIPLE_TABLES=y
|
||||
# CONFIG_IPV6_SUBTREES is not set
|
||||
CONFIG_IPV6_MROUTE=y
|
||||
|
||||
@ -986,8 +986,8 @@ CONFIG_IP_PIMSM_V2=y
|
||||
CONFIG_SYN_COOKIES=y
|
||||
CONFIG_NET_IPVTI=m
|
||||
CONFIG_NET_UDP_TUNNEL=m
|
||||
# CONFIG_NET_FOU is not set
|
||||
# CONFIG_NET_FOU_IP_TUNNELS is not set
|
||||
CONFIG_NET_FOU=m
|
||||
CONFIG_NET_FOU_IP_TUNNELS=y
|
||||
CONFIG_INET_AH=m
|
||||
CONFIG_INET_ESP=m
|
||||
CONFIG_INET_ESP_OFFLOAD=m
|
||||
@ -1040,6 +1040,8 @@ CONFIG_IPV6_SIT_6RD=y
|
||||
CONFIG_IPV6_NDISC_NODETYPE=y
|
||||
CONFIG_IPV6_TUNNEL=m
|
||||
CONFIG_IPV6_GRE=m
|
||||
CONFIG_IPV6_FOU=m
|
||||
CONFIG_IPV6_FOU_TUNNEL=m
|
||||
CONFIG_IPV6_MULTIPLE_TABLES=y
|
||||
# CONFIG_IPV6_SUBTREES is not set
|
||||
CONFIG_IPV6_MROUTE=y
|
||||
|
||||
@ -969,8 +969,8 @@ CONFIG_IP_PIMSM_V2=y
|
||||
CONFIG_SYN_COOKIES=y
|
||||
CONFIG_NET_IPVTI=m
|
||||
CONFIG_NET_UDP_TUNNEL=m
|
||||
# CONFIG_NET_FOU is not set
|
||||
# CONFIG_NET_FOU_IP_TUNNELS is not set
|
||||
CONFIG_NET_FOU=m
|
||||
CONFIG_NET_FOU_IP_TUNNELS=y
|
||||
CONFIG_INET_AH=m
|
||||
CONFIG_INET_ESP=m
|
||||
CONFIG_INET_ESP_OFFLOAD=m
|
||||
@ -1023,6 +1023,8 @@ CONFIG_IPV6_SIT_6RD=y
|
||||
CONFIG_IPV6_NDISC_NODETYPE=y
|
||||
CONFIG_IPV6_TUNNEL=m
|
||||
CONFIG_IPV6_GRE=m
|
||||
CONFIG_IPV6_FOU=m
|
||||
CONFIG_IPV6_FOU_TUNNEL=m
|
||||
CONFIG_IPV6_MULTIPLE_TABLES=y
|
||||
# CONFIG_IPV6_SUBTREES is not set
|
||||
CONFIG_IPV6_MROUTE=y
|
||||
|
||||
@ -832,8 +832,8 @@ CONFIG_IP_PIMSM_V2=y
|
||||
CONFIG_SYN_COOKIES=y
|
||||
CONFIG_NET_IPVTI=m
|
||||
CONFIG_NET_UDP_TUNNEL=m
|
||||
# CONFIG_NET_FOU is not set
|
||||
# CONFIG_NET_FOU_IP_TUNNELS is not set
|
||||
CONFIG_NET_FOU=m
|
||||
CONFIG_NET_FOU_IP_TUNNELS=y
|
||||
CONFIG_INET_AH=m
|
||||
CONFIG_INET_ESP=m
|
||||
CONFIG_INET_ESP_OFFLOAD=m
|
||||
@ -886,6 +886,8 @@ CONFIG_IPV6_SIT_6RD=y
|
||||
CONFIG_IPV6_NDISC_NODETYPE=y
|
||||
CONFIG_IPV6_TUNNEL=m
|
||||
CONFIG_IPV6_GRE=m
|
||||
CONFIG_IPV6_FOU=m
|
||||
CONFIG_IPV6_FOU_TUNNEL=m
|
||||
CONFIG_IPV6_MULTIPLE_TABLES=y
|
||||
# CONFIG_IPV6_SUBTREES is not set
|
||||
CONFIG_IPV6_MROUTE=y
|
||||
|
||||
@ -855,8 +855,8 @@ CONFIG_IP_PIMSM_V2=y
|
||||
CONFIG_SYN_COOKIES=y
|
||||
CONFIG_NET_IPVTI=m
|
||||
CONFIG_NET_UDP_TUNNEL=m
|
||||
# CONFIG_NET_FOU is not set
|
||||
# CONFIG_NET_FOU_IP_TUNNELS is not set
|
||||
CONFIG_NET_FOU=m
|
||||
CONFIG_NET_FOU_IP_TUNNELS=y
|
||||
CONFIG_INET_AH=m
|
||||
CONFIG_INET_ESP=m
|
||||
CONFIG_INET_ESP_OFFLOAD=m
|
||||
@ -909,6 +909,8 @@ CONFIG_IPV6_SIT_6RD=y
|
||||
CONFIG_IPV6_NDISC_NODETYPE=y
|
||||
CONFIG_IPV6_TUNNEL=m
|
||||
CONFIG_IPV6_GRE=m
|
||||
CONFIG_IPV6_FOU=m
|
||||
CONFIG_IPV6_FOU_TUNNEL=m
|
||||
CONFIG_IPV6_MULTIPLE_TABLES=y
|
||||
# CONFIG_IPV6_SUBTREES is not set
|
||||
CONFIG_IPV6_MROUTE=y
|
||||
|
||||
@ -1282,8 +1282,8 @@ CONFIG_IP_PIMSM_V2=y
|
||||
CONFIG_SYN_COOKIES=y
|
||||
CONFIG_NET_IPVTI=m
|
||||
CONFIG_NET_UDP_TUNNEL=m
|
||||
# CONFIG_NET_FOU is not set
|
||||
# CONFIG_NET_FOU_IP_TUNNELS is not set
|
||||
CONFIG_NET_FOU=m
|
||||
CONFIG_NET_FOU_IP_TUNNELS=y
|
||||
CONFIG_INET_AH=m
|
||||
CONFIG_INET_ESP=m
|
||||
CONFIG_INET_ESP_OFFLOAD=m
|
||||
@ -1336,6 +1336,8 @@ CONFIG_IPV6_SIT_6RD=y
|
||||
CONFIG_IPV6_NDISC_NODETYPE=y
|
||||
CONFIG_IPV6_TUNNEL=m
|
||||
CONFIG_IPV6_GRE=m
|
||||
CONFIG_IPV6_FOU=m
|
||||
CONFIG_IPV6_FOU_TUNNEL=m
|
||||
CONFIG_IPV6_MULTIPLE_TABLES=y
|
||||
# CONFIG_IPV6_SUBTREES is not set
|
||||
CONFIG_IPV6_MROUTE=y
|
||||
|
||||
@ -1282,8 +1282,8 @@ CONFIG_IP_PIMSM_V2=y
|
||||
CONFIG_SYN_COOKIES=y
|
||||
CONFIG_NET_IPVTI=m
|
||||
CONFIG_NET_UDP_TUNNEL=m
|
||||
# CONFIG_NET_FOU is not set
|
||||
# CONFIG_NET_FOU_IP_TUNNELS is not set
|
||||
CONFIG_NET_FOU=m
|
||||
CONFIG_NET_FOU_IP_TUNNELS=y
|
||||
CONFIG_INET_AH=m
|
||||
CONFIG_INET_ESP=m
|
||||
CONFIG_INET_ESP_OFFLOAD=m
|
||||
@ -1336,6 +1336,8 @@ CONFIG_IPV6_SIT_6RD=y
|
||||
CONFIG_IPV6_NDISC_NODETYPE=y
|
||||
CONFIG_IPV6_TUNNEL=m
|
||||
CONFIG_IPV6_GRE=m
|
||||
CONFIG_IPV6_FOU=m
|
||||
CONFIG_IPV6_FOU_TUNNEL=m
|
||||
CONFIG_IPV6_MULTIPLE_TABLES=y
|
||||
# CONFIG_IPV6_SUBTREES is not set
|
||||
CONFIG_IPV6_MROUTE=y
|
||||
|
||||
@ -1279,8 +1279,8 @@ CONFIG_IP_PIMSM_V2=y
|
||||
CONFIG_SYN_COOKIES=y
|
||||
CONFIG_NET_IPVTI=m
|
||||
CONFIG_NET_UDP_TUNNEL=m
|
||||
# CONFIG_NET_FOU is not set
|
||||
# CONFIG_NET_FOU_IP_TUNNELS is not set
|
||||
CONFIG_NET_FOU=m
|
||||
CONFIG_NET_FOU_IP_TUNNELS=y
|
||||
CONFIG_INET_AH=m
|
||||
CONFIG_INET_ESP=m
|
||||
CONFIG_INET_ESP_OFFLOAD=m
|
||||
@ -1333,6 +1333,8 @@ CONFIG_IPV6_SIT_6RD=y
|
||||
CONFIG_IPV6_NDISC_NODETYPE=y
|
||||
CONFIG_IPV6_TUNNEL=m
|
||||
CONFIG_IPV6_GRE=m
|
||||
CONFIG_IPV6_FOU=m
|
||||
CONFIG_IPV6_FOU_TUNNEL=m
|
||||
CONFIG_IPV6_MULTIPLE_TABLES=y
|
||||
# CONFIG_IPV6_SUBTREES is not set
|
||||
CONFIG_IPV6_MROUTE=y
|
||||
|
||||
@ -1278,8 +1278,8 @@ CONFIG_IP_PIMSM_V2=y
|
||||
CONFIG_SYN_COOKIES=y
|
||||
CONFIG_NET_IPVTI=m
|
||||
CONFIG_NET_UDP_TUNNEL=m
|
||||
# CONFIG_NET_FOU is not set
|
||||
# CONFIG_NET_FOU_IP_TUNNELS is not set
|
||||
CONFIG_NET_FOU=m
|
||||
CONFIG_NET_FOU_IP_TUNNELS=y
|
||||
CONFIG_INET_AH=m
|
||||
CONFIG_INET_ESP=m
|
||||
CONFIG_INET_ESP_OFFLOAD=m
|
||||
@ -1332,6 +1332,8 @@ CONFIG_IPV6_SIT_6RD=y
|
||||
CONFIG_IPV6_NDISC_NODETYPE=y
|
||||
CONFIG_IPV6_TUNNEL=m
|
||||
CONFIG_IPV6_GRE=m
|
||||
CONFIG_IPV6_FOU=m
|
||||
CONFIG_IPV6_FOU_TUNNEL=m
|
||||
CONFIG_IPV6_MULTIPLE_TABLES=y
|
||||
# CONFIG_IPV6_SUBTREES is not set
|
||||
CONFIG_IPV6_MROUTE=y
|
||||
|
||||
@ -47,6 +47,8 @@ ems_pci.ko
|
||||
ems_usb.ko
|
||||
esd_usb2.ko
|
||||
esi-sir.ko
|
||||
fou.ko
|
||||
fou6.ko
|
||||
gamecon.ko
|
||||
gf2k.ko
|
||||
gigaset.ko
|
||||
|
||||
@ -128,18 +128,29 @@ dpll_msg_add_mode_supported(struct sk_buff *msg, struct dpll_device *dpll,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
const struct dpll_device_ops *ops = dpll_device_ops(dpll);
|
||||
DECLARE_BITMAP(modes, DPLL_MODE_MAX + 1) = { 0 };
|
||||
enum dpll_mode mode;
|
||||
int ret;
|
||||
|
||||
/* No mode change is supported now, so the only supported mode is the
|
||||
* one obtained by mode_get().
|
||||
*/
|
||||
if (ops->supported_modes_get) {
|
||||
ret = ops->supported_modes_get(dpll, dpll_priv(dpll), modes,
|
||||
extack);
|
||||
if (ret)
|
||||
return ret;
|
||||
} else {
|
||||
/* If the supported modes are not reported by the driver, the
|
||||
* only supported mode is the one obtained by mode_get().
|
||||
*/
|
||||
ret = ops->mode_get(dpll, dpll_priv(dpll), &mode, extack);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = ops->mode_get(dpll, dpll_priv(dpll), &mode, extack);
|
||||
if (ret)
|
||||
return ret;
|
||||
if (nla_put_u32(msg, DPLL_A_MODE_SUPPORTED, mode))
|
||||
return -EMSGSIZE;
|
||||
__set_bit(mode, modes);
|
||||
}
|
||||
|
||||
for_each_set_bit(mode, modes, DPLL_MODE_MAX + 1)
|
||||
if (nla_put_u32(msg, DPLL_A_MODE_SUPPORTED, mode))
|
||||
return -EMSGSIZE;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -378,7 +389,15 @@ static int dpll_msg_add_ffo(struct sk_buff *msg, struct dpll_pin *pin,
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
return nla_put_sint(msg, DPLL_A_PIN_FRACTIONAL_FREQUENCY_OFFSET, ffo);
|
||||
/* Put the FFO value in PPM to preserve compatibility with older
|
||||
* programs.
|
||||
*/
|
||||
ret = nla_put_sint(msg, DPLL_A_PIN_FRACTIONAL_FREQUENCY_OFFSET,
|
||||
div_s64(ffo, 1000000));
|
||||
if (ret)
|
||||
return -EMSGSIZE;
|
||||
return nla_put_sint(msg, DPLL_A_PIN_FRACTIONAL_FREQUENCY_OFFSET_PPT,
|
||||
ffo);
|
||||
}
|
||||
|
||||
static int
|
||||
@ -842,6 +861,45 @@ int dpll_pin_change_ntf(struct dpll_pin *pin)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(dpll_pin_change_ntf);
|
||||
|
||||
static int
|
||||
dpll_mode_set(struct dpll_device *dpll, struct nlattr *a,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
const struct dpll_device_ops *ops = dpll_device_ops(dpll);
|
||||
DECLARE_BITMAP(modes, DPLL_MODE_MAX + 1) = { 0 };
|
||||
enum dpll_mode mode = nla_get_u32(a), old_mode;
|
||||
int ret;
|
||||
|
||||
if (!(ops->mode_set && ops->supported_modes_get)) {
|
||||
NL_SET_ERR_MSG_ATTR(extack, a,
|
||||
"dpll device does not support mode switch");
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
ret = ops->mode_get(dpll, dpll_priv(dpll), &old_mode, extack);
|
||||
if (ret) {
|
||||
NL_SET_ERR_MSG(extack, "unable to get current mode");
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (mode == old_mode)
|
||||
return 0;
|
||||
|
||||
ret = ops->supported_modes_get(dpll, dpll_priv(dpll), modes, extack);
|
||||
if (ret) {
|
||||
NL_SET_ERR_MSG(extack, "unable to get supported modes");
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (!test_bit(mode, modes)) {
|
||||
NL_SET_ERR_MSG(extack,
|
||||
"dpll device does not support requested mode");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return ops->mode_set(dpll, dpll_priv(dpll), mode, extack);
|
||||
}
|
||||
|
||||
static int
|
||||
dpll_phase_offset_monitor_set(struct dpll_device *dpll, struct nlattr *a,
|
||||
struct netlink_ext_ack *extack)
|
||||
@ -1797,6 +1855,11 @@ dpll_set_from_nlattr(struct dpll_device *dpll, struct genl_info *info)
|
||||
nla_for_each_attr(a, genlmsg_data(info->genlhdr),
|
||||
genlmsg_len(info->genlhdr), rem) {
|
||||
switch (nla_type(a)) {
|
||||
case DPLL_A_MODE:
|
||||
ret = dpll_mode_set(dpll, a, info->extack);
|
||||
if (ret)
|
||||
return ret;
|
||||
break;
|
||||
case DPLL_A_PHASE_OFFSET_MONITOR:
|
||||
ret = dpll_phase_offset_monitor_set(dpll, a,
|
||||
info->extack);
|
||||
|
||||
@ -44,6 +44,7 @@ static const struct nla_policy dpll_device_get_nl_policy[DPLL_A_ID + 1] = {
|
||||
/* DPLL_CMD_DEVICE_SET - do */
|
||||
static const struct nla_policy dpll_device_set_nl_policy[DPLL_A_PHASE_OFFSET_AVG_FACTOR + 1] = {
|
||||
[DPLL_A_ID] = { .type = NLA_U32, },
|
||||
[DPLL_A_MODE] = NLA_POLICY_RANGE(NLA_U32, 1, 2),
|
||||
[DPLL_A_PHASE_OFFSET_MONITOR] = NLA_POLICY_MAX(NLA_U32, 1),
|
||||
[DPLL_A_PHASE_OFFSET_AVG_FACTOR] = { .type = NLA_U32, },
|
||||
};
|
||||
|
||||
@ -710,8 +710,11 @@ zl3073x_ref_ffo_update(struct zl3073x_dev *zldev)
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
/* Convert to ppm -> ffo = (10^6 * value) / 2^32 */
|
||||
zldev->ref[i].ffo = mul_s64_u64_shr(value, 1000000, 32);
|
||||
/* Convert to ppt
|
||||
* ffo = (10^12 * value) / 2^32
|
||||
* ffo = ( 5^12 * value) / 2^20
|
||||
*/
|
||||
zldev->ref[i].ffo = mul_s64_u64_shr(value, 244140625, 20);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
@ -100,6 +100,20 @@ zl3073x_dpll_pin_direction_get(const struct dpll_pin *dpll_pin, void *pin_priv,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct zl3073x_dpll_pin *
|
||||
zl3073x_dpll_pin_get_by_ref(struct zl3073x_dpll *zldpll, u8 ref_id)
|
||||
{
|
||||
struct zl3073x_dpll_pin *pin;
|
||||
|
||||
list_for_each_entry(pin, &zldpll->pins, list) {
|
||||
if (zl3073x_dpll_is_input_pin(pin) &&
|
||||
zl3073x_input_pin_ref_get(pin->id) == ref_id)
|
||||
return pin;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static int
|
||||
zl3073x_dpll_input_pin_esync_get(const struct dpll_pin *dpll_pin,
|
||||
void *pin_priv,
|
||||
@ -1137,6 +1151,26 @@ zl3073x_dpll_lock_status_get(const struct dpll_device *dpll, void *dpll_priv,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
zl3073x_dpll_supported_modes_get(const struct dpll_device *dpll,
|
||||
void *dpll_priv, unsigned long *modes,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct zl3073x_dpll *zldpll = dpll_priv;
|
||||
|
||||
/* We support switching between automatic and manual mode, except in
|
||||
* a case where the DPLL channel is configured to run in NCO mode.
|
||||
* In this case, report only the manual mode to which the NCO is mapped
|
||||
* as the only supported one.
|
||||
*/
|
||||
if (zldpll->refsel_mode != ZL_DPLL_MODE_REFSEL_MODE_NCO)
|
||||
__set_bit(DPLL_MODE_AUTOMATIC, modes);
|
||||
|
||||
__set_bit(DPLL_MODE_MANUAL, modes);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
zl3073x_dpll_mode_get(const struct dpll_device *dpll, void *dpll_priv,
|
||||
enum dpll_mode *mode, struct netlink_ext_ack *extack)
|
||||
@ -1217,6 +1251,82 @@ zl3073x_dpll_phase_offset_avg_factor_set(const struct dpll_device *dpll,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
zl3073x_dpll_mode_set(const struct dpll_device *dpll, void *dpll_priv,
|
||||
enum dpll_mode mode, struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct zl3073x_dpll *zldpll = dpll_priv;
|
||||
u8 hw_mode, mode_refsel, ref;
|
||||
int rc;
|
||||
|
||||
rc = zl3073x_dpll_selected_ref_get(zldpll, &ref);
|
||||
if (rc) {
|
||||
NL_SET_ERR_MSG_MOD(extack, "failed to get selected reference");
|
||||
return rc;
|
||||
}
|
||||
|
||||
if (mode == DPLL_MODE_MANUAL) {
|
||||
/* We are switching from automatic to manual mode:
|
||||
* - if we have a valid reference selected during auto mode then
|
||||
* we will switch to forced reference lock mode and use this
|
||||
* reference for selection
|
||||
* - if NO valid reference is selected, we will switch to forced
|
||||
* holdover mode or freerun mode, depending on the current
|
||||
* lock status
|
||||
*/
|
||||
if (ZL3073X_DPLL_REF_IS_VALID(ref))
|
||||
hw_mode = ZL_DPLL_MODE_REFSEL_MODE_REFLOCK;
|
||||
else if (zldpll->lock_status == DPLL_LOCK_STATUS_UNLOCKED)
|
||||
hw_mode = ZL_DPLL_MODE_REFSEL_MODE_FREERUN;
|
||||
else
|
||||
hw_mode = ZL_DPLL_MODE_REFSEL_MODE_HOLDOVER;
|
||||
} else {
|
||||
/* We are switching from manual to automatic mode:
|
||||
* - if there is a valid reference selected then ensure that
|
||||
* it is selectable after switch to automatic mode
|
||||
* - switch to automatic mode
|
||||
*/
|
||||
struct zl3073x_dpll_pin *pin;
|
||||
|
||||
pin = zl3073x_dpll_pin_get_by_ref(zldpll, ref);
|
||||
if (pin && !pin->selectable) {
|
||||
/* Restore pin priority in HW */
|
||||
rc = zl3073x_dpll_ref_prio_set(pin, pin->prio);
|
||||
if (rc) {
|
||||
NL_SET_ERR_MSG_MOD(extack,
|
||||
"failed to restore pin priority");
|
||||
return rc;
|
||||
}
|
||||
|
||||
pin->selectable = true;
|
||||
}
|
||||
|
||||
hw_mode = ZL_DPLL_MODE_REFSEL_MODE_AUTO;
|
||||
}
|
||||
|
||||
/* Build mode_refsel value */
|
||||
mode_refsel = FIELD_PREP(ZL_DPLL_MODE_REFSEL_MODE, hw_mode);
|
||||
|
||||
if (ZL3073X_DPLL_REF_IS_VALID(ref))
|
||||
mode_refsel |= FIELD_PREP(ZL_DPLL_MODE_REFSEL_REF, ref);
|
||||
|
||||
/* Update dpll_mode_refsel register */
|
||||
rc = zl3073x_write_u8(zldpll->dev, ZL_REG_DPLL_MODE_REFSEL(zldpll->id),
|
||||
mode_refsel);
|
||||
if (rc) {
|
||||
NL_SET_ERR_MSG_MOD(extack,
|
||||
"failed to set reference selection mode");
|
||||
return rc;
|
||||
}
|
||||
|
||||
zldpll->refsel_mode = hw_mode;
|
||||
|
||||
if (ZL3073X_DPLL_REF_IS_VALID(ref))
|
||||
zldpll->forced_ref = ref;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
zl3073x_dpll_phase_offset_monitor_get(const struct dpll_device *dpll,
|
||||
void *dpll_priv,
|
||||
@ -1276,10 +1386,12 @@ static const struct dpll_pin_ops zl3073x_dpll_output_pin_ops = {
|
||||
static const struct dpll_device_ops zl3073x_dpll_device_ops = {
|
||||
.lock_status_get = zl3073x_dpll_lock_status_get,
|
||||
.mode_get = zl3073x_dpll_mode_get,
|
||||
.mode_set = zl3073x_dpll_mode_set,
|
||||
.phase_offset_avg_factor_get = zl3073x_dpll_phase_offset_avg_factor_get,
|
||||
.phase_offset_avg_factor_set = zl3073x_dpll_phase_offset_avg_factor_set,
|
||||
.phase_offset_monitor_get = zl3073x_dpll_phase_offset_monitor_get,
|
||||
.phase_offset_monitor_set = zl3073x_dpll_phase_offset_monitor_set,
|
||||
.supported_modes_get = zl3073x_dpll_supported_modes_get,
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@ -5,6 +5,10 @@
|
||||
#include "i40e.h"
|
||||
#include "i40e_devlink.h"
|
||||
|
||||
/* RHEL-specific opt-in to expose "phys_port_name" in sysfs to match upstream behavior. */
|
||||
static int rh_phys_port_name;
|
||||
module_param(rh_phys_port_name, int, 0644);
|
||||
|
||||
static void i40e_info_get_dsn(struct i40e_pf *pf, char *buf, size_t len)
|
||||
{
|
||||
u8 dsn[8];
|
||||
@ -229,7 +233,7 @@ int i40e_devlink_create_port(struct i40e_pf *pf)
|
||||
**/
|
||||
struct devlink_port *i40e_get_devlink_port(struct net_device *netdev)
|
||||
{
|
||||
return NULL;
|
||||
return rh_phys_port_name ? netdev->devlink_port : NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -49,6 +49,10 @@ MODULE_PARM_DESC(debug, "netif level (0=none,...,16=all), hw debug_mask (0x8XXXX
|
||||
MODULE_PARM_DESC(debug, "netif level (0=none,...,16=all)");
|
||||
#endif /* !CONFIG_DYNAMIC_DEBUG */
|
||||
|
||||
/* RHEL-only opt-in to expose "phys_port_name" in sysfs */
|
||||
static int rh_phys_port_name;
|
||||
module_param(rh_phys_port_name, int, 0644);
|
||||
|
||||
DEFINE_STATIC_KEY_FALSE(ice_xdp_locking_key);
|
||||
EXPORT_SYMBOL(ice_xdp_locking_key);
|
||||
|
||||
@ -321,6 +325,9 @@ static struct devlink_port *ice_get_devlink_port(struct net_device *netdev)
|
||||
{
|
||||
struct ice_pf *pf = ice_netdev_to_pf(netdev);
|
||||
|
||||
if (rh_phys_port_name)
|
||||
return netdev->devlink_port;
|
||||
|
||||
if (!ice_is_switchdev_running(pf))
|
||||
return NULL;
|
||||
|
||||
@ -3401,18 +3408,20 @@ static irqreturn_t ice_misc_intr_thread_fn(int __always_unused irq, void *data)
|
||||
if (ice_is_reset_in_progress(pf->state))
|
||||
goto skip_irq;
|
||||
|
||||
if (test_and_clear_bit(ICE_MISC_THREAD_TX_TSTAMP, pf->misc_thread)) {
|
||||
/* Process outstanding Tx timestamps. If there is more work,
|
||||
* re-arm the interrupt to trigger again.
|
||||
*/
|
||||
if (ice_ptp_process_ts(pf) == ICE_TX_TSTAMP_WORK_PENDING) {
|
||||
wr32(hw, PFINT_OICR, PFINT_OICR_TSYN_TX_M);
|
||||
ice_flush(hw);
|
||||
}
|
||||
}
|
||||
if (test_and_clear_bit(ICE_MISC_THREAD_TX_TSTAMP, pf->misc_thread))
|
||||
ice_ptp_process_ts(pf);
|
||||
|
||||
skip_irq:
|
||||
ice_irq_dynamic_ena(hw, NULL, NULL);
|
||||
ice_flush(hw);
|
||||
|
||||
if (ice_ptp_tx_tstamps_pending(pf)) {
|
||||
/* If any new Tx timestamps happened while in interrupt,
|
||||
* re-arm the interrupt to trigger it again.
|
||||
*/
|
||||
wr32(hw, PFINT_OICR, PFINT_OICR_TSYN_TX_M);
|
||||
ice_flush(hw);
|
||||
}
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
@ -666,6 +666,9 @@ static void ice_ptp_process_tx_tstamp(struct ice_ptp_tx *tx)
|
||||
pf = ptp_port_to_pf(ptp_port);
|
||||
hw = &pf->hw;
|
||||
|
||||
if (!tx->init)
|
||||
return;
|
||||
|
||||
/* Read the Tx ready status first */
|
||||
if (tx->has_ready_bitmap) {
|
||||
err = ice_get_phy_tx_tstamp_ready(hw, tx->block, &tstamp_ready);
|
||||
@ -762,14 +765,9 @@ skip_ts_read:
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_ptp_tx_tstamp_owner - Process Tx timestamps for all ports on the device
|
||||
* @pf: Board private structure
|
||||
*/
|
||||
static enum ice_tx_tstamp_work ice_ptp_tx_tstamp_owner(struct ice_pf *pf)
|
||||
static void ice_ptp_tx_tstamp_owner(struct ice_pf *pf)
|
||||
{
|
||||
struct ice_ptp_port *port;
|
||||
unsigned int i;
|
||||
|
||||
mutex_lock(&pf->adapter->ports.lock);
|
||||
list_for_each_entry(port, &pf->adapter->ports.ports, list_node) {
|
||||
@ -781,49 +779,6 @@ static enum ice_tx_tstamp_work ice_ptp_tx_tstamp_owner(struct ice_pf *pf)
|
||||
ice_ptp_process_tx_tstamp(tx);
|
||||
}
|
||||
mutex_unlock(&pf->adapter->ports.lock);
|
||||
|
||||
for (i = 0; i < ICE_GET_QUAD_NUM(pf->hw.ptp.num_lports); i++) {
|
||||
u64 tstamp_ready;
|
||||
int err;
|
||||
|
||||
/* Read the Tx ready status first */
|
||||
err = ice_get_phy_tx_tstamp_ready(&pf->hw, i, &tstamp_ready);
|
||||
if (err)
|
||||
break;
|
||||
else if (tstamp_ready)
|
||||
return ICE_TX_TSTAMP_WORK_PENDING;
|
||||
}
|
||||
|
||||
return ICE_TX_TSTAMP_WORK_DONE;
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_ptp_tx_tstamp - Process Tx timestamps for this function.
|
||||
* @tx: Tx tracking structure to initialize
|
||||
*
|
||||
* Returns: ICE_TX_TSTAMP_WORK_PENDING if there are any outstanding incomplete
|
||||
* Tx timestamps, or ICE_TX_TSTAMP_WORK_DONE otherwise.
|
||||
*/
|
||||
static enum ice_tx_tstamp_work ice_ptp_tx_tstamp(struct ice_ptp_tx *tx)
|
||||
{
|
||||
bool more_timestamps;
|
||||
unsigned long flags;
|
||||
|
||||
if (!tx->init)
|
||||
return ICE_TX_TSTAMP_WORK_DONE;
|
||||
|
||||
/* Process the Tx timestamp tracker */
|
||||
ice_ptp_process_tx_tstamp(tx);
|
||||
|
||||
/* Check if there are outstanding Tx timestamps */
|
||||
spin_lock_irqsave(&tx->lock, flags);
|
||||
more_timestamps = tx->init && !bitmap_empty(tx->in_use, tx->len);
|
||||
spin_unlock_irqrestore(&tx->lock, flags);
|
||||
|
||||
if (more_timestamps)
|
||||
return ICE_TX_TSTAMP_WORK_PENDING;
|
||||
|
||||
return ICE_TX_TSTAMP_WORK_DONE;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -2837,32 +2792,94 @@ s8 ice_ptp_request_ts(struct ice_ptp_tx *tx, struct sk_buff *skb)
|
||||
return idx + tx->offset;
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_ptp_process_ts - Process the PTP Tx timestamps
|
||||
* @pf: Board private structure
|
||||
*
|
||||
* Returns: ICE_TX_TSTAMP_WORK_PENDING if there are any outstanding Tx
|
||||
* timestamps that need processing, and ICE_TX_TSTAMP_WORK_DONE otherwise.
|
||||
*/
|
||||
enum ice_tx_tstamp_work ice_ptp_process_ts(struct ice_pf *pf)
|
||||
void ice_ptp_process_ts(struct ice_pf *pf)
|
||||
{
|
||||
switch (pf->ptp.tx_interrupt_mode) {
|
||||
case ICE_PTP_TX_INTERRUPT_NONE:
|
||||
/* This device has the clock owner handle timestamps for it */
|
||||
return ICE_TX_TSTAMP_WORK_DONE;
|
||||
return;
|
||||
case ICE_PTP_TX_INTERRUPT_SELF:
|
||||
/* This device handles its own timestamps */
|
||||
return ice_ptp_tx_tstamp(&pf->ptp.port.tx);
|
||||
ice_ptp_process_tx_tstamp(&pf->ptp.port.tx);
|
||||
return;
|
||||
case ICE_PTP_TX_INTERRUPT_ALL:
|
||||
/* This device handles timestamps for all ports */
|
||||
return ice_ptp_tx_tstamp_owner(pf);
|
||||
ice_ptp_tx_tstamp_owner(pf);
|
||||
return;
|
||||
default:
|
||||
WARN_ONCE(1, "Unexpected Tx timestamp interrupt mode %u\n",
|
||||
pf->ptp.tx_interrupt_mode);
|
||||
return ICE_TX_TSTAMP_WORK_DONE;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
static bool ice_port_has_timestamps(struct ice_ptp_tx *tx)
|
||||
{
|
||||
bool more_timestamps;
|
||||
|
||||
scoped_guard(spinlock_irqsave, &tx->lock) {
|
||||
if (!tx->init)
|
||||
return false;
|
||||
|
||||
more_timestamps = !bitmap_empty(tx->in_use, tx->len);
|
||||
}
|
||||
|
||||
return more_timestamps;
|
||||
}
|
||||
|
||||
static bool ice_any_port_has_timestamps(struct ice_pf *pf)
|
||||
{
|
||||
struct ice_ptp_port *port;
|
||||
|
||||
scoped_guard(mutex, &pf->adapter->ports.lock) {
|
||||
list_for_each_entry(port, &pf->adapter->ports.ports,
|
||||
list_node) {
|
||||
struct ice_ptp_tx *tx = &port->tx;
|
||||
|
||||
if (ice_port_has_timestamps(tx))
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ice_ptp_tx_tstamps_pending(struct ice_pf *pf)
|
||||
{
|
||||
struct ice_hw *hw = &pf->hw;
|
||||
unsigned int i;
|
||||
|
||||
/* Check software indicator */
|
||||
switch (pf->ptp.tx_interrupt_mode) {
|
||||
case ICE_PTP_TX_INTERRUPT_NONE:
|
||||
return false;
|
||||
case ICE_PTP_TX_INTERRUPT_SELF:
|
||||
if (ice_port_has_timestamps(&pf->ptp.port.tx))
|
||||
return true;
|
||||
break;
|
||||
case ICE_PTP_TX_INTERRUPT_ALL:
|
||||
if (ice_any_port_has_timestamps(pf))
|
||||
return true;
|
||||
break;
|
||||
default:
|
||||
WARN_ONCE(1, "Unexpected Tx timestamp interrupt mode %u\n",
|
||||
pf->ptp.tx_interrupt_mode);
|
||||
break;
|
||||
}
|
||||
|
||||
/* Check hardware indicator */
|
||||
for (i = 0; i < ICE_GET_QUAD_NUM(hw->ptp.num_lports); i++) {
|
||||
u64 tstamp_ready = 0;
|
||||
int err;
|
||||
|
||||
err = ice_get_phy_tx_tstamp_ready(&pf->hw, i, &tstamp_ready);
|
||||
if (err || tstamp_ready)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_ptp_ts_irq - Process the PTP Tx timestamps in IRQ context
|
||||
* @pf: Board private structure
|
||||
@ -2912,7 +2929,9 @@ irqreturn_t ice_ptp_ts_irq(struct ice_pf *pf)
|
||||
return IRQ_WAKE_THREAD;
|
||||
case ICE_MAC_E830:
|
||||
/* E830 can read timestamps in the top half using rd32() */
|
||||
if (ice_ptp_process_ts(pf) == ICE_TX_TSTAMP_WORK_PENDING) {
|
||||
ice_ptp_process_ts(pf);
|
||||
|
||||
if (ice_ptp_tx_tstamps_pending(pf)) {
|
||||
/* Process outstanding Tx timestamps. If there
|
||||
* is more work, re-arm the interrupt to trigger again.
|
||||
*/
|
||||
@ -3365,8 +3384,9 @@ static void ice_ptp_init_tx_interrupt_mode(struct ice_pf *pf)
|
||||
{
|
||||
switch (pf->hw.mac_type) {
|
||||
case ICE_MAC_GENERIC:
|
||||
/* E822 based PHY has the clock owner process the interrupt
|
||||
* for all ports.
|
||||
case ICE_MAC_GENERIC_3K_E825:
|
||||
/* E82x hardware has the clock owner process timestamps for
|
||||
* all ports.
|
||||
*/
|
||||
if (ice_pf_src_tmr_owned(pf))
|
||||
pf->ptp.tx_interrupt_mode = ICE_PTP_TX_INTERRUPT_ALL;
|
||||
|
||||
@ -302,8 +302,9 @@ void ice_ptp_extts_event(struct ice_pf *pf);
|
||||
s8 ice_ptp_request_ts(struct ice_ptp_tx *tx, struct sk_buff *skb);
|
||||
void ice_ptp_req_tx_single_tstamp(struct ice_ptp_tx *tx, u8 idx);
|
||||
void ice_ptp_complete_tx_single_tstamp(struct ice_ptp_tx *tx);
|
||||
enum ice_tx_tstamp_work ice_ptp_process_ts(struct ice_pf *pf);
|
||||
void ice_ptp_process_ts(struct ice_pf *pf);
|
||||
irqreturn_t ice_ptp_ts_irq(struct ice_pf *pf);
|
||||
bool ice_ptp_tx_tstamps_pending(struct ice_pf *pf);
|
||||
u64 ice_ptp_read_src_clk_reg(struct ice_pf *pf,
|
||||
struct ptp_system_timestamp *sts);
|
||||
|
||||
@ -339,16 +340,18 @@ static inline void ice_ptp_req_tx_single_tstamp(struct ice_ptp_tx *tx, u8 idx)
|
||||
|
||||
static inline void ice_ptp_complete_tx_single_tstamp(struct ice_ptp_tx *tx) { }
|
||||
|
||||
static inline bool ice_ptp_process_ts(struct ice_pf *pf)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
static inline void ice_ptp_process_ts(struct ice_pf *pf) { }
|
||||
|
||||
static inline irqreturn_t ice_ptp_ts_irq(struct ice_pf *pf)
|
||||
{
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
static inline bool ice_ptp_tx_tstamps_pending(struct ice_pf *pf)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline u64 ice_ptp_read_src_clk_reg(struct ice_pf *pf,
|
||||
struct ptp_system_timestamp *sts)
|
||||
{
|
||||
|
||||
@ -136,7 +136,7 @@ mlx5_dpll_pin_ffo_get(struct mlx5_dpll_synce_status *synce_status,
|
||||
{
|
||||
if (!synce_status->oper_freq_measure)
|
||||
return -ENODATA;
|
||||
*ffo = synce_status->frequency_diff;
|
||||
*ffo = 1000000LL * synce_status->frequency_diff;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@ -1546,8 +1546,9 @@ qla2x00_update_optrom(struct bsg_job *bsg_job)
|
||||
ha->optrom_buffer = NULL;
|
||||
ha->optrom_state = QLA_SWAITING;
|
||||
mutex_unlock(&ha->optrom_mutex);
|
||||
bsg_job_done(bsg_job, bsg_reply->result,
|
||||
bsg_reply->reply_payload_rcv_len);
|
||||
if (!rval)
|
||||
bsg_job_done(bsg_job, bsg_reply->result,
|
||||
bsg_reply->reply_payload_rcv_len);
|
||||
return rval;
|
||||
}
|
||||
|
||||
@ -2612,8 +2613,9 @@ qla2x00_manage_host_stats(struct bsg_job *bsg_job)
|
||||
sizeof(struct ql_vnd_mng_host_stats_resp));
|
||||
|
||||
bsg_reply->result = DID_OK;
|
||||
bsg_job_done(bsg_job, bsg_reply->result,
|
||||
bsg_reply->reply_payload_rcv_len);
|
||||
if (!ret)
|
||||
bsg_job_done(bsg_job, bsg_reply->result,
|
||||
bsg_reply->reply_payload_rcv_len);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -2702,8 +2704,9 @@ qla2x00_get_host_stats(struct bsg_job *bsg_job)
|
||||
bsg_job->reply_payload.sg_cnt,
|
||||
data, response_len);
|
||||
bsg_reply->result = DID_OK;
|
||||
bsg_job_done(bsg_job, bsg_reply->result,
|
||||
bsg_reply->reply_payload_rcv_len);
|
||||
if (!ret)
|
||||
bsg_job_done(bsg_job, bsg_reply->result,
|
||||
bsg_reply->reply_payload_rcv_len);
|
||||
|
||||
kfree(data);
|
||||
host_stat_out:
|
||||
@ -2802,8 +2805,9 @@ reply:
|
||||
bsg_job->reply_payload.sg_cnt, data,
|
||||
response_len);
|
||||
bsg_reply->result = DID_OK;
|
||||
bsg_job_done(bsg_job, bsg_reply->result,
|
||||
bsg_reply->reply_payload_rcv_len);
|
||||
if (!ret)
|
||||
bsg_job_done(bsg_job, bsg_reply->result,
|
||||
bsg_reply->reply_payload_rcv_len);
|
||||
|
||||
tgt_stat_out:
|
||||
kfree(data);
|
||||
@ -2864,8 +2868,9 @@ qla2x00_manage_host_port(struct bsg_job *bsg_job)
|
||||
bsg_job->reply_payload.sg_cnt, &rsp_data,
|
||||
sizeof(struct ql_vnd_mng_host_port_resp));
|
||||
bsg_reply->result = DID_OK;
|
||||
bsg_job_done(bsg_job, bsg_reply->result,
|
||||
bsg_reply->reply_payload_rcv_len);
|
||||
if (!ret)
|
||||
bsg_job_done(bsg_job, bsg_reply->result,
|
||||
bsg_reply->reply_payload_rcv_len);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -3240,7 +3245,8 @@ int qla2x00_mailbox_passthru(struct bsg_job *bsg_job)
|
||||
|
||||
bsg_job->reply_len = sizeof(*bsg_job->reply);
|
||||
bsg_reply->result = DID_OK << 16;
|
||||
bsg_job_done(bsg_job, bsg_reply->result, bsg_reply->reply_payload_rcv_len);
|
||||
if (!ret)
|
||||
bsg_job_done(bsg_job, bsg_reply->result, bsg_reply->reply_payload_rcv_len);
|
||||
|
||||
kfree(req_data);
|
||||
|
||||
|
||||
@ -16,6 +16,8 @@
|
||||
#include <linux/wait.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/sched/signal.h>
|
||||
#include <uapi/linux/mount.h>
|
||||
#include <linux/nsproxy.h>
|
||||
#include <linux/mount.h>
|
||||
#include <linux/namei.h>
|
||||
#include <linux/uaccess.h>
|
||||
@ -25,6 +27,8 @@
|
||||
#include <linux/completion.h>
|
||||
#include <linux/file.h>
|
||||
#include <linux/magic.h>
|
||||
#include "../mount.h"
|
||||
#include <linux/ns_common.h>
|
||||
|
||||
/* This is the range of ioctl() numbers we claim as ours */
|
||||
#define AUTOFS_IOC_FIRST AUTOFS_IOC_READY
|
||||
@ -112,6 +116,7 @@ struct autofs_sb_info {
|
||||
int pipefd;
|
||||
struct file *pipe;
|
||||
struct pid *oz_pgrp;
|
||||
u64 mnt_ns_id;
|
||||
int version;
|
||||
int sub_version;
|
||||
int min_proto;
|
||||
|
||||
@ -381,6 +381,7 @@ static int autofs_dev_ioctl_setpipefd(struct file *fp,
|
||||
swap(sbi->oz_pgrp, new_pid);
|
||||
sbi->pipefd = pipefd;
|
||||
sbi->pipe = pipe;
|
||||
sbi->mnt_ns_id = current->nsproxy->mnt_ns->seq;
|
||||
sbi->flags &= ~AUTOFS_SBI_CATATONIC;
|
||||
}
|
||||
out:
|
||||
|
||||
@ -239,6 +239,7 @@ int autofs_fill_super(struct super_block *s, void *data, int silent)
|
||||
s->s_fs_info = sbi;
|
||||
sbi->magic = AUTOFS_SBI_MAGIC;
|
||||
sbi->pipefd = -1;
|
||||
sbi->mnt_ns_id = current->nsproxy->mnt_ns->seq;
|
||||
sbi->pipe = NULL;
|
||||
sbi->exp_timeout = 0;
|
||||
sbi->oz_pgrp = NULL;
|
||||
|
||||
@ -341,6 +341,14 @@ static struct vfsmount *autofs_d_automount(struct path *path)
|
||||
if (autofs_oz_mode(sbi))
|
||||
return NULL;
|
||||
|
||||
/* Refuse to trigger mount if current namespace is not the owner
|
||||
* and the mount is propagation private.
|
||||
*/
|
||||
if (sbi->mnt_ns_id != current->nsproxy->mnt_ns->seq) {
|
||||
if (vfsmount_to_propagation_flags(path->mnt) & MS_PRIVATE)
|
||||
return ERR_PTR(-EPERM);
|
||||
}
|
||||
|
||||
/*
|
||||
* If an expire request is pending everyone must wait.
|
||||
* If the expire fails we're still mounted so continue
|
||||
|
||||
@ -4278,6 +4278,27 @@ SYSCALL_DEFINE5(mount_setattr, int, dfd, const char __user *, path,
|
||||
return err;
|
||||
}
|
||||
|
||||
static u64 mnt_to_propagation_flags(struct mount *m)
|
||||
{
|
||||
u64 propagation = 0;
|
||||
|
||||
if (IS_MNT_SHARED(m))
|
||||
propagation |= MS_SHARED;
|
||||
if (IS_MNT_SLAVE(m))
|
||||
propagation |= MS_SLAVE;
|
||||
if (IS_MNT_UNBINDABLE(m))
|
||||
propagation |= MS_UNBINDABLE;
|
||||
if (!propagation)
|
||||
propagation |= MS_PRIVATE;
|
||||
|
||||
return propagation;
|
||||
}
|
||||
|
||||
u64 vfsmount_to_propagation_flags(struct vfsmount *mnt)
|
||||
{
|
||||
return mnt_to_propagation_flags(real_mount(mnt));
|
||||
}
|
||||
|
||||
static void __init init_mount_tree(void)
|
||||
{
|
||||
struct vfsmount *mnt;
|
||||
|
||||
0
include/config/IPV6_FOU
Normal file
0
include/config/IPV6_FOU
Normal file
0
include/config/IPV6_FOU_TUNNEL
Normal file
0
include/config/IPV6_FOU_TUNNEL
Normal file
0
include/config/NET_FOU
Normal file
0
include/config/NET_FOU
Normal file
0
include/config/NET_FOU_IP_TUNNELS
Normal file
0
include/config/NET_FOU_IP_TUNNELS
Normal file
@ -471,6 +471,7 @@ CONFIG_MDIO_HISI_FEMAC=m
|
||||
CONFIG_SONY_FF=y
|
||||
CONFIG_SOCK_CGROUP_DATA=y
|
||||
CONFIG_COREDUMP=y
|
||||
CONFIG_NET_FOU_IP_TUNNELS=y
|
||||
CONFIG_DMABUF_DEBUG=y
|
||||
CONFIG_USB_NET_GL620A=m
|
||||
CONFIG_MICREL_KS8995MA=m
|
||||
@ -1446,6 +1447,7 @@ CONFIG_ATH9K_HW=m
|
||||
CONFIG_BLK_CGROUP=y
|
||||
CONFIG_USB_SERIAL_MCT_U232=m
|
||||
CONFIG_LEDS_TRIGGERS=y
|
||||
CONFIG_NET_FOU=m
|
||||
CONFIG_CRYPTO_RNG=y
|
||||
CONFIG_USB_SERIAL_GARMIN=m
|
||||
CONFIG_XFS_QUOTA=y
|
||||
@ -3486,6 +3488,7 @@ CONFIG_NO_HZ_FULL=y
|
||||
CONFIG_LOGITECH_FF=y
|
||||
CONFIG_BOOTTIME_TRACING=y
|
||||
CONFIG_TEGRA186_GPC_DMA=m
|
||||
CONFIG_IPV6_FOU_TUNNEL=m
|
||||
CONFIG_HID_KYE=m
|
||||
CONFIG_CRYPTO_CHACHA20=m
|
||||
CONFIG_HID_GEMBIRD=m
|
||||
@ -3650,6 +3653,7 @@ CONFIG_INET_ESP_OFFLOAD=m
|
||||
CONFIG_PM_GENERIC_DOMAINS=y
|
||||
CONFIG_MICROSOFT_MANA=m
|
||||
CONFIG_LOAD_UEFI_KEYS=y
|
||||
CONFIG_IPV6_FOU=m
|
||||
CONFIG_DRM_TEGRA=m
|
||||
CONFIG_GENERIC_CSUM=y
|
||||
CONFIG_SOC_TEGRA_CBB=y
|
||||
|
||||
@ -473,6 +473,7 @@
|
||||
#define CONFIG_SONY_FF 1
|
||||
#define CONFIG_SOCK_CGROUP_DATA 1
|
||||
#define CONFIG_COREDUMP 1
|
||||
#define CONFIG_NET_FOU_IP_TUNNELS 1
|
||||
#define CONFIG_DMABUF_DEBUG 1
|
||||
#define CONFIG_USB_NET_GL620A_MODULE 1
|
||||
#define CONFIG_MICREL_KS8995MA_MODULE 1
|
||||
@ -1448,6 +1449,7 @@
|
||||
#define CONFIG_BLK_CGROUP 1
|
||||
#define CONFIG_USB_SERIAL_MCT_U232_MODULE 1
|
||||
#define CONFIG_LEDS_TRIGGERS 1
|
||||
#define CONFIG_NET_FOU_MODULE 1
|
||||
#define CONFIG_CRYPTO_RNG 1
|
||||
#define CONFIG_USB_SERIAL_GARMIN_MODULE 1
|
||||
#define CONFIG_XFS_QUOTA 1
|
||||
@ -3488,6 +3490,7 @@
|
||||
#define CONFIG_LOGITECH_FF 1
|
||||
#define CONFIG_BOOTTIME_TRACING 1
|
||||
#define CONFIG_TEGRA186_GPC_DMA_MODULE 1
|
||||
#define CONFIG_IPV6_FOU_TUNNEL_MODULE 1
|
||||
#define CONFIG_HID_KYE_MODULE 1
|
||||
#define CONFIG_CRYPTO_CHACHA20_MODULE 1
|
||||
#define CONFIG_HID_GEMBIRD_MODULE 1
|
||||
@ -3652,6 +3655,7 @@
|
||||
#define CONFIG_PM_GENERIC_DOMAINS 1
|
||||
#define CONFIG_MICROSOFT_MANA_MODULE 1
|
||||
#define CONFIG_LOAD_UEFI_KEYS 1
|
||||
#define CONFIG_IPV6_FOU_MODULE 1
|
||||
#define CONFIG_DRM_TEGRA_MODULE 1
|
||||
#define CONFIG_GENERIC_CSUM 1
|
||||
#define CONFIG_SOC_TEGRA_CBB 1
|
||||
|
||||
@ -47,8 +47,11 @@ struct dpll_device_ops {
|
||||
RH_KABI_USE(2, int (*phase_offset_avg_factor_get)(const struct dpll_device *dpll,
|
||||
void *dpll_priv, u32 *factor,
|
||||
struct netlink_ext_ack *extack))
|
||||
RH_KABI_RESERVE(3)
|
||||
RH_KABI_RESERVE(4)
|
||||
RH_KABI_USE(3, int (*supported_modes_get)(const struct dpll_device *dpll,
|
||||
void *dpll_priv, unsigned long *modes,
|
||||
struct netlink_ext_ack *extack))
|
||||
RH_KABI_USE(4, int (*mode_set)(const struct dpll_device *dpll, void *dpll_priv,
|
||||
enum dpll_mode mode, struct netlink_ext_ack *extack))
|
||||
RH_KABI_RESERVE(5)
|
||||
RH_KABI_RESERVE(6)
|
||||
RH_KABI_RESERVE(7)
|
||||
|
||||
@ -2808,6 +2808,7 @@ extern struct file * open_exec(const char *);
|
||||
/* fs/dcache.c -- generic fs support functions */
|
||||
extern bool is_subdir(struct dentry *, struct dentry *);
|
||||
extern bool path_is_under(const struct path *, const struct path *);
|
||||
u64 vfsmount_to_propagation_flags(struct vfsmount *mnt);
|
||||
|
||||
extern char *file_path(struct file *, char *, int);
|
||||
|
||||
|
||||
@ -252,6 +252,7 @@ enum dpll_a_pin {
|
||||
DPLL_A_PIN_ESYNC_PULSE,
|
||||
DPLL_A_PIN_REFERENCE_SYNC,
|
||||
DPLL_A_PIN_PHASE_ADJUST_GRAN,
|
||||
DPLL_A_PIN_FRACTIONAL_FREQUENCY_OFFSET_PPT,
|
||||
|
||||
__DPLL_A_PIN_MAX,
|
||||
DPLL_A_PIN_MAX = (__DPLL_A_PIN_MAX - 1)
|
||||
|
||||
@ -181,6 +181,27 @@ static ktime_t tick_init_jiffy_update(void)
|
||||
return period;
|
||||
}
|
||||
|
||||
/*
|
||||
* Allow only one non-timekeeper CPU at a time update jiffies from
|
||||
* the timer tick.
|
||||
*
|
||||
* Returns true if update was run.
|
||||
*/
|
||||
static bool tick_limited_update_jiffies64(struct tick_sched *ts, ktime_t now)
|
||||
{
|
||||
static atomic_t in_progress;
|
||||
int inp;
|
||||
|
||||
inp = atomic_read(&in_progress);
|
||||
if (inp || !atomic_try_cmpxchg(&in_progress, &inp, 1))
|
||||
return false;
|
||||
|
||||
if (ts->last_tick_jiffies == jiffies)
|
||||
tick_do_update_jiffies64(now);
|
||||
atomic_set(&in_progress, 0);
|
||||
return true;
|
||||
}
|
||||
|
||||
#define MAX_STALLED_JIFFIES 5
|
||||
|
||||
static void tick_sched_do_timer(struct tick_sched *ts, ktime_t now)
|
||||
@ -218,10 +239,11 @@ static void tick_sched_do_timer(struct tick_sched *ts, ktime_t now)
|
||||
ts->stalled_jiffies = 0;
|
||||
ts->last_tick_jiffies = READ_ONCE(jiffies);
|
||||
} else {
|
||||
if (++ts->stalled_jiffies == MAX_STALLED_JIFFIES) {
|
||||
tick_do_update_jiffies64(now);
|
||||
ts->stalled_jiffies = 0;
|
||||
ts->last_tick_jiffies = READ_ONCE(jiffies);
|
||||
if (++ts->stalled_jiffies >= MAX_STALLED_JIFFIES) {
|
||||
if (tick_limited_update_jiffies64(ts, now)) {
|
||||
ts->stalled_jiffies = 0;
|
||||
ts->last_tick_jiffies = READ_ONCE(jiffies);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
12
mm/migrate.c
12
mm/migrate.c
@ -1383,6 +1383,7 @@ static int unmap_and_move_huge_page(new_folio_t get_new_folio,
|
||||
int page_was_mapped = 0;
|
||||
struct anon_vma *anon_vma = NULL;
|
||||
struct address_space *mapping = NULL;
|
||||
enum ttu_flags ttu = 0;
|
||||
|
||||
if (folio_ref_count(src) == 1) {
|
||||
/* page was freed from under us. So we are done. */
|
||||
@ -1424,8 +1425,6 @@ static int unmap_and_move_huge_page(new_folio_t get_new_folio,
|
||||
goto put_anon;
|
||||
|
||||
if (folio_mapped(src)) {
|
||||
enum ttu_flags ttu = 0;
|
||||
|
||||
if (!folio_test_anon(src)) {
|
||||
/*
|
||||
* In shared mappings, try_to_unmap could potentially
|
||||
@ -1442,9 +1441,6 @@ static int unmap_and_move_huge_page(new_folio_t get_new_folio,
|
||||
|
||||
try_to_migrate(src, ttu);
|
||||
page_was_mapped = 1;
|
||||
|
||||
if (ttu & TTU_RMAP_LOCKED)
|
||||
i_mmap_unlock_write(mapping);
|
||||
}
|
||||
|
||||
if (!folio_mapped(src))
|
||||
@ -1452,7 +1448,11 @@ static int unmap_and_move_huge_page(new_folio_t get_new_folio,
|
||||
|
||||
if (page_was_mapped)
|
||||
remove_migration_ptes(src,
|
||||
rc == MIGRATEPAGE_SUCCESS ? dst : src, false);
|
||||
rc == MIGRATEPAGE_SUCCESS ? dst : src,
|
||||
ttu ? true : false);
|
||||
|
||||
if (ttu & TTU_RMAP_LOCKED)
|
||||
i_mmap_unlock_write(mapping);
|
||||
|
||||
unlock_put_anon:
|
||||
folio_unlock(dst);
|
||||
|
||||
@ -321,7 +321,6 @@ config NET_UDP_TUNNEL
|
||||
|
||||
config NET_FOU
|
||||
tristate "IP: Foo (IP protocols) over UDP"
|
||||
select XFRM
|
||||
select NET_UDP_TUNNEL
|
||||
help
|
||||
Foo over UDP allows any IP protocol to be directly encapsulated
|
||||
|
||||
@ -16,7 +16,6 @@
|
||||
#include <net/protocol.h>
|
||||
#include <net/udp.h>
|
||||
#include <net/udp_tunnel.h>
|
||||
#include <net/xfrm.h>
|
||||
#include <uapi/linux/fou.h>
|
||||
#include <uapi/linux/genetlink.h>
|
||||
|
||||
@ -51,7 +50,7 @@ struct fou_net {
|
||||
|
||||
static inline struct fou *fou_from_sock(struct sock *sk)
|
||||
{
|
||||
return sk->sk_user_data;
|
||||
return rcu_dereference_sk_user_data(sk);
|
||||
}
|
||||
|
||||
static int fou_recv_pull(struct sk_buff *skb, struct fou *fou, size_t len)
|
||||
@ -216,6 +215,9 @@ static int gue_udp_recv(struct sock *sk, struct sk_buff *skb)
|
||||
return gue_control_message(skb, guehdr);
|
||||
|
||||
proto_ctype = guehdr->proto_ctype;
|
||||
if (unlikely(!proto_ctype))
|
||||
goto drop;
|
||||
|
||||
__skb_pull(skb, sizeof(struct udphdr) + hdrlen);
|
||||
skb_reset_transport_header(skb);
|
||||
|
||||
@ -233,10 +235,16 @@ static struct sk_buff *fou_gro_receive(struct sock *sk,
|
||||
struct list_head *head,
|
||||
struct sk_buff *skb)
|
||||
{
|
||||
u8 proto = fou_from_sock(sk)->protocol;
|
||||
const struct net_offload **offloads;
|
||||
const struct net_offload __rcu **offloads;
|
||||
struct fou *fou = fou_from_sock(sk);
|
||||
const struct net_offload *ops;
|
||||
struct sk_buff *pp = NULL;
|
||||
u8 proto;
|
||||
|
||||
if (!fou)
|
||||
return NULL;
|
||||
|
||||
proto = fou->protocol;
|
||||
|
||||
/* We can clear the encap_mark for FOU as we are essentially doing
|
||||
* one of two possible things. We are either adding an L4 tunnel
|
||||
@ -266,16 +274,24 @@ out_unlock:
|
||||
static int fou_gro_complete(struct sock *sk, struct sk_buff *skb,
|
||||
int nhoff)
|
||||
{
|
||||
const struct net_offload __rcu **offloads;
|
||||
struct fou *fou = fou_from_sock(sk);
|
||||
const struct net_offload *ops;
|
||||
u8 proto = fou_from_sock(sk)->protocol;
|
||||
int err = -ENOSYS;
|
||||
const struct net_offload **offloads;
|
||||
u8 proto;
|
||||
int err;
|
||||
|
||||
if (!fou)
|
||||
return -ENOENT;
|
||||
|
||||
proto = fou->protocol;
|
||||
|
||||
rcu_read_lock();
|
||||
offloads = NAPI_GRO_CB(skb)->is_ipv6 ? inet6_offloads : inet_offloads;
|
||||
ops = rcu_dereference(offloads[proto]);
|
||||
if (WARN_ON(!ops || !ops->callbacks.gro_complete))
|
||||
if (WARN_ON(!ops || !ops->callbacks.gro_complete)) {
|
||||
err = -ENOSYS;
|
||||
goto out_unlock;
|
||||
}
|
||||
|
||||
err = ops->callbacks.gro_complete(skb, nhoff);
|
||||
|
||||
@ -314,7 +330,7 @@ static struct sk_buff *gue_gro_receive(struct sock *sk,
|
||||
struct list_head *head,
|
||||
struct sk_buff *skb)
|
||||
{
|
||||
const struct net_offload **offloads;
|
||||
const struct net_offload __rcu **offloads;
|
||||
const struct net_offload *ops;
|
||||
struct sk_buff *pp = NULL;
|
||||
struct sk_buff *p;
|
||||
@ -329,6 +345,9 @@ static struct sk_buff *gue_gro_receive(struct sock *sk,
|
||||
|
||||
skb_gro_remcsum_init(&grc);
|
||||
|
||||
if (!fou)
|
||||
goto out;
|
||||
|
||||
off = skb_gro_offset(skb);
|
||||
len = off + sizeof(*guehdr);
|
||||
|
||||
@ -441,7 +460,7 @@ next_proto:
|
||||
rcu_read_lock();
|
||||
offloads = NAPI_GRO_CB(skb)->is_ipv6 ? inet6_offloads : inet_offloads;
|
||||
ops = rcu_dereference(offloads[proto]);
|
||||
if (WARN_ON_ONCE(!ops || !ops->callbacks.gro_receive))
|
||||
if (!ops || !ops->callbacks.gro_receive)
|
||||
goto out_unlock;
|
||||
|
||||
pp = call_gro_receive(ops->callbacks.gro_receive, head, skb);
|
||||
@ -457,8 +476,8 @@ out:
|
||||
|
||||
static int gue_gro_complete(struct sock *sk, struct sk_buff *skb, int nhoff)
|
||||
{
|
||||
const struct net_offload **offloads;
|
||||
struct guehdr *guehdr = (struct guehdr *)(skb->data + nhoff);
|
||||
const struct net_offload __rcu **offloads;
|
||||
const struct net_offload *ops;
|
||||
unsigned int guehlen = 0;
|
||||
u8 proto;
|
||||
|
||||
@ -14,7 +14,7 @@
|
||||
const struct nla_policy fou_nl_policy[FOU_ATTR_IFINDEX + 1] = {
|
||||
[FOU_ATTR_PORT] = { .type = NLA_U16, },
|
||||
[FOU_ATTR_AF] = { .type = NLA_U8, },
|
||||
[FOU_ATTR_IPPROTO] = { .type = NLA_U8, },
|
||||
[FOU_ATTR_IPPROTO] = NLA_POLICY_MIN(NLA_U8, 1),
|
||||
[FOU_ATTR_TYPE] = { .type = NLA_U8, },
|
||||
[FOU_ATTR_REMCSUM_NOPARTIAL] = { .type = NLA_FLAG, },
|
||||
[FOU_ATTR_LOCAL_V4] = { .type = NLA_U32, },
|
||||
|
||||
@ -154,8 +154,8 @@ struct sk_buff *skb_udp_tunnel_segment(struct sk_buff *skb,
|
||||
netdev_features_t features,
|
||||
bool is_ipv6)
|
||||
{
|
||||
const struct net_offload __rcu **offloads;
|
||||
__be16 protocol = skb->protocol;
|
||||
const struct net_offload **offloads;
|
||||
const struct net_offload *ops;
|
||||
struct sk_buff *segs = ERR_PTR(-EINVAL);
|
||||
struct sk_buff *(*gso_inner_segment)(struct sk_buff *skb,
|
||||
|
||||
@ -1322,7 +1322,8 @@ static int calipso_skbuff_setattr(struct sk_buff *skb,
|
||||
/* At this point new_end aligns to 4n, so (new_end & 4) pads to 8n */
|
||||
pad = ((new_end & 4) + (end & 7)) & 7;
|
||||
len_delta = new_end - (int)end + pad;
|
||||
ret_val = skb_cow(skb, skb_headroom(skb) + len_delta);
|
||||
ret_val = skb_cow(skb,
|
||||
skb_headroom(skb) + (len_delta > 0 ? len_delta : 0));
|
||||
if (ret_val < 0)
|
||||
return ret_val;
|
||||
|
||||
|
||||
@ -426,8 +426,6 @@ smc_clc_msg_decl_valid(struct smc_clc_msg_decline *dclc)
|
||||
{
|
||||
struct smc_clc_msg_hdr *hdr = &dclc->hdr;
|
||||
|
||||
if (hdr->typev1 != SMC_TYPE_R && hdr->typev1 != SMC_TYPE_D)
|
||||
return false;
|
||||
if (hdr->version == SMC_V1) {
|
||||
if (ntohs(hdr->length) != sizeof(struct smc_clc_msg_decline))
|
||||
return false;
|
||||
@ -656,26 +654,26 @@ static int smc_clc_prfx_match6_rcu(struct net_device *dev,
|
||||
int smc_clc_prfx_match(struct socket *clcsock,
|
||||
struct smc_clc_msg_proposal_prefix *prop)
|
||||
{
|
||||
struct dst_entry *dst = sk_dst_get(clcsock->sk);
|
||||
struct net_device *dev;
|
||||
struct dst_entry *dst;
|
||||
int rc;
|
||||
|
||||
if (!dst) {
|
||||
rc = -ENOTCONN;
|
||||
rcu_read_lock();
|
||||
|
||||
dst = __sk_dst_get(clcsock->sk);
|
||||
dev = dst ? dst_dev_rcu(dst) : NULL;
|
||||
if (!dev) {
|
||||
rc = -ENODEV;
|
||||
goto out;
|
||||
}
|
||||
if (!dst->dev) {
|
||||
rc = -ENODEV;
|
||||
goto out_rel;
|
||||
}
|
||||
rcu_read_lock();
|
||||
|
||||
if (!prop->ipv6_prefixes_cnt)
|
||||
rc = smc_clc_prfx_match4_rcu(dst->dev, prop);
|
||||
rc = smc_clc_prfx_match4_rcu(dev, prop);
|
||||
else
|
||||
rc = smc_clc_prfx_match6_rcu(dst->dev, prop);
|
||||
rcu_read_unlock();
|
||||
out_rel:
|
||||
dst_release(dst);
|
||||
rc = smc_clc_prfx_match6_rcu(dev, prop);
|
||||
out:
|
||||
rcu_read_unlock();
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
||||
1
redhat/configs/common/generic/CONFIG_NET_FOU
Normal file
1
redhat/configs/common/generic/CONFIG_NET_FOU
Normal file
@ -0,0 +1 @@
|
||||
CONFIG_NET_FOU=m
|
||||
1
redhat/configs/common/generic/CONFIG_NET_FOU_IP_TUNNELS
Normal file
1
redhat/configs/common/generic/CONFIG_NET_FOU_IP_TUNNELS
Normal file
@ -0,0 +1 @@
|
||||
CONFIG_NET_FOU_IP_TUNNELS=y
|
||||
@ -1 +0,0 @@
|
||||
# CONFIG_NET_FOU is not set
|
||||
@ -1 +0,0 @@
|
||||
# CONFIG_NET_FOU_IP_TUNNELS is not set
|
||||
@ -1,3 +1,31 @@
|
||||
* Tue Feb 24 2026 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [5.14.0-611.36.1.el9_7]
|
||||
- net/smc: Remove validation of reserved bits in CLC Decline message (Mete Durlu) [RHEL-143718]
|
||||
- autofs: dont trigger mount if it cant succeed (Ian Kent) [RHEL-149495]
|
||||
- migrate: correct lock ordering for hugetlb file folios (Luiz Capitulino) [RHEL-147266] {CVE-2026-23097}
|
||||
- ice: PTP: fix missing timestamps on E825 hardware (CKI Backport Bot) [RHEL-148166]
|
||||
- fou: Don't allow 0 for FOU_ATTR_IPPROTO. (Xin Long) [RHEL-144987]
|
||||
- tools: ynl: Specify --no-line-number in ynl-regen.sh. (Xin Long) [RHEL-144987]
|
||||
- gue: Fix skb memleak with inner IP protocol 0. (Xin Long) [RHEL-144987]
|
||||
- netlink: specs: fou: replace underscores with dashes in names (Xin Long) [RHEL-144987]
|
||||
- fou: fix initialization of grc (Xin Long) [RHEL-144987]
|
||||
- fou: Fix null-ptr-deref in GRO. (Xin Long) [RHEL-144987]
|
||||
- fou: remove warn in gue_gro_receive on unsupported protocol (Xin Long) [RHEL-144987]
|
||||
- fou: Remove XRFM from NET_FOU Kconfig (Xin Long) [RHEL-144987]
|
||||
- fou: remove sparse errors (Xin Long) [RHEL-144987]
|
||||
- redhat: enable FOU modules in kernel-modules-extra (Xin Long) [RHEL-144987]
|
||||
- s390/mm: Fix __ptep_rdp() inline assembly (Mete Durlu) [RHEL-143713]
|
||||
- dpll: expose fractional frequency offset in ppt (Ivan Vecera) [RHEL-146357]
|
||||
- dpll: zl3073x: Implement device mode setting support (Ivan Vecera) [RHEL-147459]
|
||||
- dpll: add dpll_device op to set working mode (Ivan Vecera) [RHEL-147459]
|
||||
- dpll: add dpll_device op to get supported modes (Ivan Vecera) [RHEL-147459]
|
||||
- i40e: add rh_phys_port_name mod option to behave like upstream (CKI Backport Bot) [RHEL-128237]
|
||||
- ice: add rh_phys_port_name mod option to behave like upstream (CKI Backport Bot) [RHEL-128237]
|
||||
- scsi: qla2xxx: Fix bsg_done() causing double free (Ewan D. Milne) [RHEL-146049]
|
||||
- ipv6: BUG() in pskb_expand_head() as part of calipso_skbuff_setattr() (CKI Backport Bot) [RHEL-143545] {CVE-2025-71085}
|
||||
- tick/sched: Limit non-timekeeper CPUs calling jiffies update (Phil Auld) [RHEL-141462]
|
||||
- smc: Use __sk_dst_get() and dst_dev_rcu() in smc_clc_prfx_match(). (Mete Durlu) [RHEL-130017] {CVE-2025-40168}
|
||||
Resolves: RHEL-128237, RHEL-130017, RHEL-141462, RHEL-143545, RHEL-143713, RHEL-143718, RHEL-144987, RHEL-146049, RHEL-146357, RHEL-147266, RHEL-147459, RHEL-148166, RHEL-149495
|
||||
|
||||
* Tue Feb 17 2026 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [5.14.0-611.35.1.el9_7]
|
||||
- page_pool: Fix use-after-free in page_pool_recycle_in_ring (Paolo Abeni) [RHEL-137841] {CVE-2025-38129}
|
||||
- exfat: fix double free in delayed_free (CKI Backport Bot) [RHEL-146403] {CVE-2025-38206}
|
||||
|
||||
@ -47,6 +47,8 @@ ems_pci.ko
|
||||
ems_usb.ko
|
||||
esd_usb2.ko
|
||||
esi-sir.ko
|
||||
fou.ko
|
||||
fou6.ko
|
||||
gamecon.ko
|
||||
gf2k.ko
|
||||
gigaset.ko
|
||||
|
||||
@ -21,7 +21,7 @@ files=$(git grep --files-with-matches '^/\* YNL-GEN \(kernel\|uapi\|user\)')
|
||||
for f in $files; do
|
||||
# params: 0 1 2 3
|
||||
# $YAML YNL-GEN kernel $mode
|
||||
params=( $(git grep -B1 -h '/\* YNL-GEN' $f | sed 's@/\*\(.*\)\*/@\1@') )
|
||||
params=( $(git grep --no-line-number -B1 -h '/\* YNL-GEN' $f | sed 's@/\*\(.*\)\*/@\1@') )
|
||||
args=$(sed -n 's@/\* YNL-ARG \(.*\) \*/@\1@p' $f)
|
||||
|
||||
if [ $f -nt ${params[0]} -a -z "$force" ]; then
|
||||
|
||||
Loading…
Reference in New Issue
Block a user