diff options
| author | David S. Miller <davem@davemloft.net> | 2020-07-11 00:46:00 -0700 | 
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2020-07-11 00:46:00 -0700 | 
| commit | 71930d61025e7d0254f3c682cb1b5242e0499cf3 (patch) | |
| tree | 43b642f15d33ae6ba08a31ddf2d50e2915868a5e /tools/lib | |
| parent | a594920f8747fa032c784c3660d6cd5a8ab291f8 (diff) | |
| parent | 1df0d8960499e58963fd6c8ac75e544f2b417b29 (diff) | |
| download | linux-71930d61025e7d0254f3c682cb1b5242e0499cf3.tar.bz2 | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
All conflicts seemed rather trivial, with some guidance from
Saeed Mameed on the tc_ct.c one.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'tools/lib')
| -rw-r--r-- | tools/lib/bpf/bpf.h | 2 | ||||
| -rw-r--r-- | tools/lib/bpf/hashmap.h | 12 | ||||
| -rw-r--r-- | tools/lib/bpf/libbpf.c | 10 | ||||
| -rw-r--r-- | tools/lib/traceevent/kbuffer-parse.c | 43 | ||||
| -rw-r--r-- | tools/lib/traceevent/kbuffer.h | 2 | 
5 files changed, 57 insertions, 12 deletions
| diff --git a/tools/lib/bpf/bpf.h b/tools/lib/bpf/bpf.h index 1b6015b21ba8..dbef24ebcfcb 100644 --- a/tools/lib/bpf/bpf.h +++ b/tools/lib/bpf/bpf.h @@ -233,6 +233,8 @@ LIBBPF_API int bpf_load_btf(void *btf, __u32 btf_size, char *log_buf,  LIBBPF_API int bpf_task_fd_query(int pid, int fd, __u32 flags, char *buf,  				 __u32 *buf_len, __u32 *prog_id, __u32 *fd_type,  				 __u64 *probe_offset, __u64 *probe_addr); + +enum bpf_stats_type; /* defined in up-to-date linux/bpf.h */  LIBBPF_API int bpf_enable_stats(enum bpf_stats_type type);  #ifdef __cplusplus diff --git a/tools/lib/bpf/hashmap.h b/tools/lib/bpf/hashmap.h index df59fd4fc95b..e0af36b0e5d8 100644 --- a/tools/lib/bpf/hashmap.h +++ b/tools/lib/bpf/hashmap.h @@ -11,14 +11,18 @@  #include <stdbool.h>  #include <stddef.h>  #include <limits.h> -#ifndef __WORDSIZE -#define __WORDSIZE (__SIZEOF_LONG__ * 8) -#endif  static inline size_t hash_bits(size_t h, int bits)  {  	/* shuffle bits and return requested number of upper bits */ -	return (h * 11400714819323198485llu) >> (__WORDSIZE - bits); +#if (__SIZEOF_SIZE_T__ == __SIZEOF_LONG_LONG__) +	/* LP64 case */ +	return (h * 11400714819323198485llu) >> (__SIZEOF_LONG_LONG__ * 8 - bits); +#elif (__SIZEOF_SIZE_T__ <= __SIZEOF_LONG__) +	return (h * 2654435769lu) >> (__SIZEOF_LONG__ * 8 - bits); +#else +#	error "Unsupported size_t size" +#endif  }  typedef size_t (*hashmap_hash_fn)(const void *key, void *ctx); diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c index 4ea7f4f1a691..51fd9b6c6a77 100644 --- a/tools/lib/bpf/libbpf.c +++ b/tools/lib/bpf/libbpf.c @@ -4977,7 +4977,13 @@ bpf_core_reloc_fields(struct bpf_object *obj, const char *targ_btf_path)  			err = -EINVAL;  			goto out;  		} -		prog = bpf_object__find_program_by_title(obj, sec_name); +		prog = NULL; +		for (i = 0; i < obj->nr_programs; i++) { +			if (!strcmp(obj->programs[i].section_name, sec_name)) { +				prog = &obj->programs[i]; +				break; +			} +		}  		if (!prog) {  			pr_warn("failed to find program '%s' for CO-RE offset relocation\n",  				sec_name); @@ -6904,7 +6910,7 @@ static const struct bpf_sec_def section_defs[] = {  		.expected_attach_type = BPF_TRACE_ITER,  		.is_attach_btf = true,  		.attach_fn = attach_iter), -	BPF_EAPROG_SEC("xdp_devmap",		BPF_PROG_TYPE_XDP, +	BPF_EAPROG_SEC("xdp_devmap/",		BPF_PROG_TYPE_XDP,  						BPF_XDP_DEVMAP),  	BPF_PROG_SEC("xdp",			BPF_PROG_TYPE_XDP),  	BPF_PROG_SEC("perf_event",		BPF_PROG_TYPE_PERF_EVENT), diff --git a/tools/lib/traceevent/kbuffer-parse.c b/tools/lib/traceevent/kbuffer-parse.c index 27f3b07fdae8..f1640d651c8a 100644 --- a/tools/lib/traceevent/kbuffer-parse.c +++ b/tools/lib/traceevent/kbuffer-parse.c @@ -361,6 +361,7 @@ translate_data(struct kbuffer *kbuf, void *data, void **rptr,  		break;  	case KBUFFER_TYPE_TIME_EXTEND: +	case KBUFFER_TYPE_TIME_STAMP:  		extend = read_4(kbuf, data);  		data += 4;  		extend <<= TS_SHIFT; @@ -369,10 +370,6 @@ translate_data(struct kbuffer *kbuf, void *data, void **rptr,  		*length = 0;  		break; -	case KBUFFER_TYPE_TIME_STAMP: -		data += 12; -		*length = 0; -		break;  	case 0:  		*length = read_4(kbuf, data) - 4;  		*length = (*length + 3) & ~3; @@ -397,7 +394,11 @@ static unsigned int update_pointers(struct kbuffer *kbuf)  	type_len = translate_data(kbuf, ptr, &ptr, &delta, &length); -	kbuf->timestamp += delta; +	if (type_len == KBUFFER_TYPE_TIME_STAMP) +		kbuf->timestamp = delta; +	else +		kbuf->timestamp += delta; +  	kbuf->index = calc_index(kbuf, ptr);  	kbuf->next = kbuf->index + length; @@ -454,7 +455,9 @@ static int __next_event(struct kbuffer *kbuf)  		if (kbuf->next >= kbuf->size)  			return -1;  		type = update_pointers(kbuf); -	} while (type == KBUFFER_TYPE_TIME_EXTEND || type == KBUFFER_TYPE_PADDING); +	} while (type == KBUFFER_TYPE_TIME_EXTEND || +		 type == KBUFFER_TYPE_TIME_STAMP || +		 type == KBUFFER_TYPE_PADDING);  	return 0;  } @@ -547,6 +550,34 @@ int kbuffer_load_subbuffer(struct kbuffer *kbuf, void *subbuffer)  }  /** + * kbuffer_subbuf_timestamp - read the timestamp from a sub buffer + * @kbuf:      The kbuffer to load + * @subbuf:    The subbuffer to read from. + * + * Return the timestamp from a subbuffer. + */ +unsigned long long kbuffer_subbuf_timestamp(struct kbuffer *kbuf, void *subbuf) +{ +	return kbuf->read_8(subbuf); +} + +/** + * kbuffer_ptr_delta - read the delta field from a record + * @kbuf:      The kbuffer to load + * @ptr:       The record in the buffe. + * + * Return the timestamp delta from a record + */ +unsigned int kbuffer_ptr_delta(struct kbuffer *kbuf, void *ptr) +{ +	unsigned int type_len_ts; + +	type_len_ts = read_4(kbuf, ptr); +	return ts4host(kbuf, type_len_ts); +} + + +/**   * kbuffer_read_event - read the next event in the kbuffer subbuffer   * @kbuf:	The kbuffer to read from   * @ts:		The address to store the timestamp of the event (may be NULL to ignore) diff --git a/tools/lib/traceevent/kbuffer.h b/tools/lib/traceevent/kbuffer.h index ed4d697fc137..5fa8292e341b 100644 --- a/tools/lib/traceevent/kbuffer.h +++ b/tools/lib/traceevent/kbuffer.h @@ -49,6 +49,8 @@ int kbuffer_load_subbuffer(struct kbuffer *kbuf, void *subbuffer);  void *kbuffer_read_event(struct kbuffer *kbuf, unsigned long long *ts);  void *kbuffer_next_event(struct kbuffer *kbuf, unsigned long long *ts);  unsigned long long kbuffer_timestamp(struct kbuffer *kbuf); +unsigned long long kbuffer_subbuf_timestamp(struct kbuffer *kbuf, void *subbuf); +unsigned int kbuffer_ptr_delta(struct kbuffer *kbuf, void *ptr);  void *kbuffer_translate_data(int swap, void *data, unsigned int *size); |