mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-04-13 20:14:37 -04:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Cross-merge networking fixes after downstream PR. Conflicts: drivers/net/ethernet/intel/ice/ice_main.cc9663f79cd("ice: adjust switchdev rebuild path")7758017911("ice: restore timestamp configuration after device reset") https://lore.kernel.org/all/20231121211259.3348630-1-anthony.l.nguyen@intel.com/ Adjacent changes: kernel/bpf/verifier.cbb124da69c("bpf: keep track of max number of bpf_loop callback iterations")5f99f312bd("bpf: add register bounds sanity checks and sanitization") Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
@@ -301,6 +301,17 @@ struct bpf_func_state {
|
||||
struct tnum callback_ret_range;
|
||||
bool in_async_callback_fn;
|
||||
bool in_exception_callback_fn;
|
||||
/* For callback calling functions that limit number of possible
|
||||
* callback executions (e.g. bpf_loop) keeps track of current
|
||||
* simulated iteration number.
|
||||
* Value in frame N refers to number of times callback with frame
|
||||
* N+1 was simulated, e.g. for the following call:
|
||||
*
|
||||
* bpf_loop(..., fn, ...); | suppose current frame is N
|
||||
* | fn would be simulated in frame N+1
|
||||
* | number of simulations is tracked in frame N
|
||||
*/
|
||||
u32 callback_depth;
|
||||
|
||||
/* The following fields should be last. See copy_func_state() */
|
||||
int acquired_refs;
|
||||
@@ -400,6 +411,7 @@ struct bpf_verifier_state {
|
||||
struct bpf_idx_pair *jmp_history;
|
||||
u32 jmp_history_cnt;
|
||||
u32 dfs_depth;
|
||||
u32 callback_unroll_depth;
|
||||
};
|
||||
|
||||
#define bpf_get_spilled_reg(slot, frame, mask) \
|
||||
@@ -511,6 +523,10 @@ struct bpf_insn_aux_data {
|
||||
* this instruction, regardless of any heuristics
|
||||
*/
|
||||
bool force_checkpoint;
|
||||
/* true if instruction is a call to a helper function that
|
||||
* accepts callback function as a parameter.
|
||||
*/
|
||||
bool calls_callback;
|
||||
};
|
||||
|
||||
#define MAX_USED_MAPS 64 /* max number of maps accessed by one eBPF program */
|
||||
|
||||
@@ -195,6 +195,7 @@ enum cpuhp_state {
|
||||
CPUHP_AP_ARM_CORESIGHT_CTI_STARTING,
|
||||
CPUHP_AP_ARM64_ISNDEP_STARTING,
|
||||
CPUHP_AP_SMPCFD_DYING,
|
||||
CPUHP_AP_HRTIMERS_DYING,
|
||||
CPUHP_AP_X86_TBOOT_DYING,
|
||||
CPUHP_AP_ARM_CACHE_B15_RAC_DYING,
|
||||
CPUHP_AP_ONLINE,
|
||||
|
||||
@@ -50,9 +50,7 @@
|
||||
" .previous" "\n" \
|
||||
)
|
||||
|
||||
#ifdef CONFIG_IA64
|
||||
#define KSYM_FUNC(name) @fptr(name)
|
||||
#elif defined(CONFIG_PARISC) && defined(CONFIG_64BIT)
|
||||
#if defined(CONFIG_PARISC) && defined(CONFIG_64BIT)
|
||||
#define KSYM_FUNC(name) P%name
|
||||
#else
|
||||
#define KSYM_FUNC(name) name
|
||||
|
||||
@@ -531,9 +531,9 @@ extern void sysrq_timer_list_show(void);
|
||||
|
||||
int hrtimers_prepare_cpu(unsigned int cpu);
|
||||
#ifdef CONFIG_HOTPLUG_CPU
|
||||
int hrtimers_dead_cpu(unsigned int cpu);
|
||||
int hrtimers_cpu_dying(unsigned int cpu);
|
||||
#else
|
||||
#define hrtimers_dead_cpu NULL
|
||||
#define hrtimers_cpu_dying NULL
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1797,6 +1797,13 @@ enum netdev_ml_priv_type {
|
||||
ML_PRIV_CAN,
|
||||
};
|
||||
|
||||
enum netdev_stat_type {
|
||||
NETDEV_PCPU_STAT_NONE,
|
||||
NETDEV_PCPU_STAT_LSTATS, /* struct pcpu_lstats */
|
||||
NETDEV_PCPU_STAT_TSTATS, /* struct pcpu_sw_netstats */
|
||||
NETDEV_PCPU_STAT_DSTATS, /* struct pcpu_dstats */
|
||||
};
|
||||
|
||||
/**
|
||||
* struct net_device - The DEVICE structure.
|
||||
*
|
||||
@@ -1991,10 +1998,14 @@ enum netdev_ml_priv_type {
|
||||
*
|
||||
* @ml_priv: Mid-layer private
|
||||
* @ml_priv_type: Mid-layer private type
|
||||
* @lstats: Loopback statistics
|
||||
* @tstats: Tunnel statistics
|
||||
* @dstats: Dummy statistics
|
||||
* @vstats: Virtual ethernet statistics
|
||||
*
|
||||
* @pcpu_stat_type: Type of device statistics which the core should
|
||||
* allocate/free: none, lstats, tstats, dstats. none
|
||||
* means the driver is handling statistics allocation/
|
||||
* freeing internally.
|
||||
* @lstats: Loopback statistics: packets, bytes
|
||||
* @tstats: Tunnel statistics: RX/TX packets, RX/TX bytes
|
||||
* @dstats: Dummy statistics: RX/TX/drop packets, RX/TX bytes
|
||||
*
|
||||
* @garp_port: GARP
|
||||
* @mrp_port: MRP
|
||||
@@ -2354,6 +2365,7 @@ struct net_device {
|
||||
void *ml_priv;
|
||||
enum netdev_ml_priv_type ml_priv_type;
|
||||
|
||||
enum netdev_stat_type pcpu_stat_type:8;
|
||||
union {
|
||||
struct pcpu_lstats __percpu *lstats;
|
||||
struct pcpu_sw_netstats __percpu *tstats;
|
||||
@@ -2755,6 +2767,16 @@ struct pcpu_sw_netstats {
|
||||
struct u64_stats_sync syncp;
|
||||
} __aligned(4 * sizeof(u64));
|
||||
|
||||
struct pcpu_dstats {
|
||||
u64 rx_packets;
|
||||
u64 rx_bytes;
|
||||
u64 rx_drops;
|
||||
u64 tx_packets;
|
||||
u64 tx_bytes;
|
||||
u64 tx_drops;
|
||||
struct u64_stats_sync syncp;
|
||||
} __aligned(8 * sizeof(u64));
|
||||
|
||||
struct pcpu_lstats {
|
||||
u64_stats_t packets;
|
||||
u64_stats_t bytes;
|
||||
|
||||
@@ -843,11 +843,11 @@ struct perf_event {
|
||||
};
|
||||
|
||||
/*
|
||||
* ,-----------------------[1:n]----------------------.
|
||||
* V V
|
||||
* perf_event_context <-[1:n]-> perf_event_pmu_context <--- perf_event
|
||||
* ^ ^ | |
|
||||
* `--------[1:n]---------' `-[n:1]-> pmu <-[1:n]-'
|
||||
* ,-----------------------[1:n]------------------------.
|
||||
* V V
|
||||
* perf_event_context <-[1:n]-> perf_event_pmu_context <-[1:n]- perf_event
|
||||
* | |
|
||||
* `--[n:1]-> pmu <-[1:n]--'
|
||||
*
|
||||
*
|
||||
* struct perf_event_pmu_context lifetime is refcount based and RCU freed
|
||||
@@ -865,6 +865,9 @@ struct perf_event {
|
||||
* ctx->mutex pinning the configuration. Since we hold a reference on
|
||||
* group_leader (through the filedesc) it can't go away, therefore it's
|
||||
* associated pmu_ctx must exist and cannot change due to ctx->mutex.
|
||||
*
|
||||
* perf_event holds a refcount on perf_event_context
|
||||
* perf_event holds a refcount on perf_event_pmu_context
|
||||
*/
|
||||
struct perf_event_pmu_context {
|
||||
struct pmu *pmu;
|
||||
|
||||
Reference in New Issue
Block a user