Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
An ipvlan bug fix in 'net' conflicted with the abstraction away of the IPV6 specific support in 'net-next'. Similarly, a bug fix for mlx5 in 'net' conflicted with the flow action conversion in 'net-next'. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -297,10 +297,8 @@ char *get_fdinfo(int fd, const char *key)
|
||||
snprintf(path, sizeof(path), "/proc/self/fdinfo/%d", fd);
|
||||
|
||||
fdi = fopen(path, "r");
|
||||
if (!fdi) {
|
||||
p_err("can't open fdinfo: %s", strerror(errno));
|
||||
if (!fdi)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
while ((n = getline(&line, &line_n, fdi)) > 0) {
|
||||
char *value;
|
||||
@@ -313,7 +311,6 @@ char *get_fdinfo(int fd, const char *key)
|
||||
|
||||
value = strchr(line, '\t');
|
||||
if (!value || !value[1]) {
|
||||
p_err("malformed fdinfo!?");
|
||||
free(line);
|
||||
return NULL;
|
||||
}
|
||||
@@ -326,7 +323,6 @@ char *get_fdinfo(int fd, const char *key)
|
||||
return line;
|
||||
}
|
||||
|
||||
p_err("key '%s' not found in fdinfo", key);
|
||||
free(line);
|
||||
fclose(fdi);
|
||||
return NULL;
|
||||
|
@@ -358,6 +358,20 @@ static char **parse_bytes(char **argv, const char *name, unsigned char *val,
|
||||
return argv + i;
|
||||
}
|
||||
|
||||
/* on per cpu maps we must copy the provided value on all value instances */
|
||||
static void fill_per_cpu_value(struct bpf_map_info *info, void *value)
|
||||
{
|
||||
unsigned int i, n, step;
|
||||
|
||||
if (!map_is_per_cpu(info->type))
|
||||
return;
|
||||
|
||||
n = get_possible_cpus();
|
||||
step = round_up(info->value_size, 8);
|
||||
for (i = 1; i < n; i++)
|
||||
memcpy(value + i * step, value, info->value_size);
|
||||
}
|
||||
|
||||
static int parse_elem(char **argv, struct bpf_map_info *info,
|
||||
void *key, void *value, __u32 key_size, __u32 value_size,
|
||||
__u32 *flags, __u32 **value_fd)
|
||||
@@ -440,6 +454,8 @@ static int parse_elem(char **argv, struct bpf_map_info *info,
|
||||
argv = parse_bytes(argv, "value", value, value_size);
|
||||
if (!argv)
|
||||
return -1;
|
||||
|
||||
fill_per_cpu_value(info, value);
|
||||
}
|
||||
|
||||
return parse_elem(argv, info, key, NULL, key_size, value_size,
|
||||
@@ -511,10 +527,9 @@ static int show_map_close_json(int fd, struct bpf_map_info *info)
|
||||
jsonw_uint_field(json_wtr, "owner_prog_type",
|
||||
prog_type);
|
||||
}
|
||||
if (atoi(owner_jited))
|
||||
jsonw_bool_field(json_wtr, "owner_jited", true);
|
||||
else
|
||||
jsonw_bool_field(json_wtr, "owner_jited", false);
|
||||
if (owner_jited)
|
||||
jsonw_bool_field(json_wtr, "owner_jited",
|
||||
!!atoi(owner_jited));
|
||||
|
||||
free(owner_prog_type);
|
||||
free(owner_jited);
|
||||
@@ -567,7 +582,8 @@ static int show_map_close_plain(int fd, struct bpf_map_info *info)
|
||||
char *owner_prog_type = get_fdinfo(fd, "owner_prog_type");
|
||||
char *owner_jited = get_fdinfo(fd, "owner_jited");
|
||||
|
||||
printf("\n\t");
|
||||
if (owner_prog_type || owner_jited)
|
||||
printf("\n\t");
|
||||
if (owner_prog_type) {
|
||||
unsigned int prog_type = atoi(owner_prog_type);
|
||||
|
||||
@@ -577,10 +593,9 @@ static int show_map_close_plain(int fd, struct bpf_map_info *info)
|
||||
else
|
||||
printf("owner_prog_type %d ", prog_type);
|
||||
}
|
||||
if (atoi(owner_jited))
|
||||
printf("owner jited");
|
||||
else
|
||||
printf("owner not jited");
|
||||
if (owner_jited)
|
||||
printf("owner%s jited",
|
||||
atoi(owner_jited) ? "" : " not");
|
||||
|
||||
free(owner_prog_type);
|
||||
free(owner_jited);
|
||||
|
@@ -78,13 +78,14 @@ static void print_boot_time(__u64 nsecs, char *buf, unsigned int size)
|
||||
|
||||
static int prog_fd_by_tag(unsigned char *tag)
|
||||
{
|
||||
struct bpf_prog_info info = {};
|
||||
__u32 len = sizeof(info);
|
||||
unsigned int id = 0;
|
||||
int err;
|
||||
int fd;
|
||||
|
||||
while (true) {
|
||||
struct bpf_prog_info info = {};
|
||||
__u32 len = sizeof(info);
|
||||
|
||||
err = bpf_prog_get_next_id(id, &id);
|
||||
if (err) {
|
||||
p_err("%s", strerror(errno));
|
||||
|
Reference in New Issue
Block a user