mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-16 17:57:38 -04:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Merge conflict of mlx5 resolved using instructions in merge
commit 9566e650bf.
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -204,7 +204,11 @@ int do_pin_fd(int fd, const char *name)
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
return bpf_obj_pin(fd, name);
|
||||
err = bpf_obj_pin(fd, name);
|
||||
if (err)
|
||||
p_err("can't pin the object (%s): %s", name, strerror(errno));
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
int do_pin_any(int argc, char **argv, int (*get_fd_by_id)(__u32))
|
||||
@@ -237,7 +241,7 @@ int do_pin_any(int argc, char **argv, int (*get_fd_by_id)(__u32))
|
||||
|
||||
fd = get_fd_by_id(id);
|
||||
if (fd < 0) {
|
||||
p_err("can't get prog by id (%u): %s", id, strerror(errno));
|
||||
p_err("can't open object by id (%u): %s", id, strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
# the script prints the string "Disabled" to stdout.
|
||||
#
|
||||
# Each Distro is expected to implement this script in a distro specific
|
||||
# fashion. For instance on Distros that ship with Network Manager enabled,
|
||||
# fashion. For instance, on Distros that ship with Network Manager enabled,
|
||||
# this script can be based on the Network Manager APIs for retrieving DHCP
|
||||
# information.
|
||||
|
||||
|
||||
@@ -700,7 +700,7 @@ static void kvp_get_ipconfig_info(char *if_name,
|
||||
|
||||
|
||||
/*
|
||||
* Gather the DNS state.
|
||||
* Gather the DNS state.
|
||||
* Since there is no standard way to get this information
|
||||
* across various distributions of interest; we just invoke
|
||||
* an external script that needs to be ported across distros
|
||||
@@ -1051,7 +1051,7 @@ static int parse_ip_val_buffer(char *in_buf, int *offset,
|
||||
char *start;
|
||||
|
||||
/*
|
||||
* in_buf has sequence of characters that are seperated by
|
||||
* in_buf has sequence of characters that are separated by
|
||||
* the character ';'. The last sequence does not have the
|
||||
* terminating ";" character.
|
||||
*/
|
||||
@@ -1386,6 +1386,8 @@ int main(int argc, char *argv[])
|
||||
daemonize = 0;
|
||||
break;
|
||||
case 'h':
|
||||
print_usage(argv);
|
||||
exit(0);
|
||||
default:
|
||||
print_usage(argv);
|
||||
exit(EXIT_FAILURE);
|
||||
@@ -1490,7 +1492,7 @@ int main(int argc, char *argv[])
|
||||
case KVP_OP_GET_IP_INFO:
|
||||
kvp_ip_val = &hv_msg->body.kvp_ip_val;
|
||||
|
||||
error = kvp_mac_to_ip(kvp_ip_val);
|
||||
error = kvp_mac_to_ip(kvp_ip_val);
|
||||
|
||||
if (error)
|
||||
hv_msg->error = error;
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
# be used to configure the interface.
|
||||
#
|
||||
# Each Distro is expected to implement this script in a distro specific
|
||||
# fashion. For instance on Distros that ship with Network Manager enabled,
|
||||
# fashion. For instance, on Distros that ship with Network Manager enabled,
|
||||
# this script can be based on the Network Manager APIs for configuring the
|
||||
# interface.
|
||||
#
|
||||
|
||||
@@ -42,7 +42,7 @@ static int vss_do_freeze(char *dir, unsigned int cmd)
|
||||
* If a partition is mounted more than once, only the first
|
||||
* FREEZE/THAW can succeed and the later ones will get
|
||||
* EBUSY/EINVAL respectively: there could be 2 cases:
|
||||
* 1) a user may mount the same partition to differnt directories
|
||||
* 1) a user may mount the same partition to different directories
|
||||
* by mistake or on purpose;
|
||||
* 2) The subvolume of btrfs appears to have the same partition
|
||||
* mounted more than once.
|
||||
@@ -218,6 +218,8 @@ int main(int argc, char *argv[])
|
||||
daemonize = 0;
|
||||
break;
|
||||
case 'h':
|
||||
print_usage(argv);
|
||||
exit(0);
|
||||
default:
|
||||
print_usage(argv);
|
||||
exit(EXIT_FAILURE);
|
||||
|
||||
@@ -4,10 +4,10 @@
|
||||
import os
|
||||
from optparse import OptionParser
|
||||
|
||||
help_msg = "print verbose messages. Try -vv, -vvv for more verbose messages"
|
||||
parser = OptionParser()
|
||||
parser.add_option("-v", "--verbose", dest="verbose",
|
||||
help="print verbose messages. Try -vv, -vvv for \
|
||||
more verbose messages", action="count")
|
||||
parser.add_option(
|
||||
"-v", "--verbose", dest="verbose", help=help_msg, action="count")
|
||||
|
||||
(options, args) = parser.parse_args()
|
||||
|
||||
@@ -21,27 +21,28 @@ if not os.path.isdir(vmbus_sys_path):
|
||||
exit(-1)
|
||||
|
||||
vmbus_dev_dict = {
|
||||
'{0e0b6031-5213-4934-818b-38d90ced39db}' : '[Operating system shutdown]',
|
||||
'{9527e630-d0ae-497b-adce-e80ab0175caf}' : '[Time Synchronization]',
|
||||
'{57164f39-9115-4e78-ab55-382f3bd5422d}' : '[Heartbeat]',
|
||||
'{a9a0f4e7-5a45-4d96-b827-8a841e8c03e6}' : '[Data Exchange]',
|
||||
'{35fa2e29-ea23-4236-96ae-3a6ebacba440}' : '[Backup (volume checkpoint)]',
|
||||
'{34d14be3-dee4-41c8-9ae7-6b174977c192}' : '[Guest services]',
|
||||
'{525074dc-8985-46e2-8057-a307dc18a502}' : '[Dynamic Memory]',
|
||||
'{cfa8b69e-5b4a-4cc0-b98b-8ba1a1f3f95a}' : 'Synthetic mouse',
|
||||
'{f912ad6d-2b17-48ea-bd65-f927a61c7684}' : 'Synthetic keyboard',
|
||||
'{da0a7802-e377-4aac-8e77-0558eb1073f8}' : 'Synthetic framebuffer adapter',
|
||||
'{f8615163-df3e-46c5-913f-f2d2f965ed0e}' : 'Synthetic network adapter',
|
||||
'{32412632-86cb-44a2-9b5c-50d1417354f5}' : 'Synthetic IDE Controller',
|
||||
'{ba6163d9-04a1-4d29-b605-72e2ffb1dc7f}' : 'Synthetic SCSI Controller',
|
||||
'{2f9bcc4a-0069-4af3-b76b-6fd0be528cda}' : 'Synthetic fiber channel adapter',
|
||||
'{8c2eaf3d-32a7-4b09-ab99-bd1f1c86b501}' : 'Synthetic RDMA adapter',
|
||||
'{44c4f61d-4444-4400-9d52-802e27ede19f}' : 'PCI Express pass-through',
|
||||
'{276aacf4-ac15-426c-98dd-7521ad3f01fe}' : '[Reserved system device]',
|
||||
'{f8e65716-3cb3-4a06-9a60-1889c5cccab5}' : '[Reserved system device]',
|
||||
'{3375baf4-9e15-4b30-b765-67acb10d607b}' : '[Reserved system device]',
|
||||
'{0e0b6031-5213-4934-818b-38d90ced39db}': '[Operating system shutdown]',
|
||||
'{9527e630-d0ae-497b-adce-e80ab0175caf}': '[Time Synchronization]',
|
||||
'{57164f39-9115-4e78-ab55-382f3bd5422d}': '[Heartbeat]',
|
||||
'{a9a0f4e7-5a45-4d96-b827-8a841e8c03e6}': '[Data Exchange]',
|
||||
'{35fa2e29-ea23-4236-96ae-3a6ebacba440}': '[Backup (volume checkpoint)]',
|
||||
'{34d14be3-dee4-41c8-9ae7-6b174977c192}': '[Guest services]',
|
||||
'{525074dc-8985-46e2-8057-a307dc18a502}': '[Dynamic Memory]',
|
||||
'{cfa8b69e-5b4a-4cc0-b98b-8ba1a1f3f95a}': 'Synthetic mouse',
|
||||
'{f912ad6d-2b17-48ea-bd65-f927a61c7684}': 'Synthetic keyboard',
|
||||
'{da0a7802-e377-4aac-8e77-0558eb1073f8}': 'Synthetic framebuffer adapter',
|
||||
'{f8615163-df3e-46c5-913f-f2d2f965ed0e}': 'Synthetic network adapter',
|
||||
'{32412632-86cb-44a2-9b5c-50d1417354f5}': 'Synthetic IDE Controller',
|
||||
'{ba6163d9-04a1-4d29-b605-72e2ffb1dc7f}': 'Synthetic SCSI Controller',
|
||||
'{2f9bcc4a-0069-4af3-b76b-6fd0be528cda}': 'Synthetic fiber channel adapter',
|
||||
'{8c2eaf3d-32a7-4b09-ab99-bd1f1c86b501}': 'Synthetic RDMA adapter',
|
||||
'{44c4f61d-4444-4400-9d52-802e27ede19f}': 'PCI Express pass-through',
|
||||
'{276aacf4-ac15-426c-98dd-7521ad3f01fe}': '[Reserved system device]',
|
||||
'{f8e65716-3cb3-4a06-9a60-1889c5cccab5}': '[Reserved system device]',
|
||||
'{3375baf4-9e15-4b30-b765-67acb10d607b}': '[Reserved system device]',
|
||||
}
|
||||
|
||||
|
||||
def get_vmbus_dev_attr(dev_name, attr):
|
||||
try:
|
||||
f = open('%s/%s/%s' % (vmbus_sys_path, dev_name, attr), 'r')
|
||||
@@ -52,6 +53,7 @@ def get_vmbus_dev_attr(dev_name, attr):
|
||||
|
||||
return lines
|
||||
|
||||
|
||||
class VMBus_Dev:
|
||||
pass
|
||||
|
||||
@@ -66,12 +68,13 @@ for f in os.listdir(vmbus_sys_path):
|
||||
|
||||
chn_vp_mapping = get_vmbus_dev_attr(f, 'channel_vp_mapping')
|
||||
chn_vp_mapping = [c.strip() for c in chn_vp_mapping]
|
||||
chn_vp_mapping = sorted(chn_vp_mapping,
|
||||
key = lambda c : int(c.split(':')[0]))
|
||||
chn_vp_mapping = sorted(
|
||||
chn_vp_mapping, key=lambda c: int(c.split(':')[0]))
|
||||
|
||||
chn_vp_mapping = ['\tRel_ID=%s, target_cpu=%s' %
|
||||
(c.split(':')[0], c.split(':')[1])
|
||||
for c in chn_vp_mapping]
|
||||
chn_vp_mapping = [
|
||||
'\tRel_ID=%s, target_cpu=%s' %
|
||||
(c.split(':')[0], c.split(':')[1]) for c in chn_vp_mapping
|
||||
]
|
||||
d = VMBus_Dev()
|
||||
d.sysfs_path = '%s/%s' % (vmbus_sys_path, f)
|
||||
d.vmbus_id = vmbus_id
|
||||
@@ -85,7 +88,7 @@ for f in os.listdir(vmbus_sys_path):
|
||||
vmbus_dev_list.append(d)
|
||||
|
||||
|
||||
vmbus_dev_list = sorted(vmbus_dev_list, key = lambda d : int(d.vmbus_id))
|
||||
vmbus_dev_list = sorted(vmbus_dev_list, key=lambda d: int(d.vmbus_id))
|
||||
|
||||
format0 = '%2s: %s'
|
||||
format1 = '%2s: Class_ID = %s - %s\n%s'
|
||||
@@ -95,9 +98,15 @@ for d in vmbus_dev_list:
|
||||
if verbose == 0:
|
||||
print(('VMBUS ID ' + format0) % (d.vmbus_id, d.dev_desc))
|
||||
elif verbose == 1:
|
||||
print (('VMBUS ID ' + format1) % \
|
||||
(d.vmbus_id, d.class_id, d.dev_desc, d.chn_vp_mapping))
|
||||
print(
|
||||
('VMBUS ID ' + format1) %
|
||||
(d.vmbus_id, d.class_id, d.dev_desc, d.chn_vp_mapping)
|
||||
)
|
||||
else:
|
||||
print (('VMBUS ID ' + format2) % \
|
||||
(d.vmbus_id, d.class_id, d.dev_desc, \
|
||||
d.device_id, d.sysfs_path, d.chn_vp_mapping))
|
||||
print(
|
||||
('VMBUS ID ' + format2) %
|
||||
(
|
||||
d.vmbus_id, d.class_id, d.dev_desc,
|
||||
d.device_id, d.sysfs_path, d.chn_vp_mapping
|
||||
)
|
||||
)
|
||||
|
||||
@@ -1467,8 +1467,8 @@ union bpf_attr {
|
||||
* If no cookie has been set yet, generate a new cookie. Once
|
||||
* generated, the socket cookie remains stable for the life of the
|
||||
* socket. This helper can be useful for monitoring per socket
|
||||
* networking traffic statistics as it provides a unique socket
|
||||
* identifier per namespace.
|
||||
* networking traffic statistics as it provides a global socket
|
||||
* identifier that can be assumed unique.
|
||||
* Return
|
||||
* A 8-byte long non-decreasing number on success, or 0 if the
|
||||
* socket field is missing inside *skb*.
|
||||
|
||||
@@ -187,7 +187,6 @@ struct bpf_program {
|
||||
bpf_program_clear_priv_t clear_priv;
|
||||
|
||||
enum bpf_attach_type expected_attach_type;
|
||||
int btf_fd;
|
||||
void *func_info;
|
||||
__u32 func_info_rec_size;
|
||||
__u32 func_info_cnt;
|
||||
@@ -318,7 +317,6 @@ void bpf_program__unload(struct bpf_program *prog)
|
||||
prog->instances.nr = -1;
|
||||
zfree(&prog->instances.fds);
|
||||
|
||||
zclose(prog->btf_fd);
|
||||
zfree(&prog->func_info);
|
||||
zfree(&prog->line_info);
|
||||
}
|
||||
@@ -397,7 +395,6 @@ bpf_program__init(void *data, size_t size, char *section_name, int idx,
|
||||
prog->instances.fds = NULL;
|
||||
prog->instances.nr = -1;
|
||||
prog->type = BPF_PROG_TYPE_UNSPEC;
|
||||
prog->btf_fd = -1;
|
||||
|
||||
return 0;
|
||||
errout:
|
||||
@@ -2296,9 +2293,6 @@ bpf_program_reloc_btf_ext(struct bpf_program *prog, struct bpf_object *obj,
|
||||
prog->line_info_rec_size = btf_ext__line_info_rec_size(obj->btf_ext);
|
||||
}
|
||||
|
||||
if (!insn_offset)
|
||||
prog->btf_fd = btf__fd(obj->btf);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -3366,7 +3360,7 @@ load_program(struct bpf_program *prog, struct bpf_insn *insns, int insns_cnt,
|
||||
char *cp, errmsg[STRERR_BUFSIZE];
|
||||
int log_buf_size = BPF_LOG_BUF_SIZE;
|
||||
char *log_buf;
|
||||
int ret;
|
||||
int btf_fd, ret;
|
||||
|
||||
if (!insns || !insns_cnt)
|
||||
return -EINVAL;
|
||||
@@ -3381,7 +3375,12 @@ load_program(struct bpf_program *prog, struct bpf_insn *insns, int insns_cnt,
|
||||
load_attr.license = license;
|
||||
load_attr.kern_version = kern_version;
|
||||
load_attr.prog_ifindex = prog->prog_ifindex;
|
||||
load_attr.prog_btf_fd = prog->btf_fd >= 0 ? prog->btf_fd : 0;
|
||||
/* if .BTF.ext was loaded, kernel supports associated BTF for prog */
|
||||
if (prog->obj->btf_ext)
|
||||
btf_fd = bpf_object__btf_fd(prog->obj);
|
||||
else
|
||||
btf_fd = -1;
|
||||
load_attr.prog_btf_fd = btf_fd >= 0 ? btf_fd : 0;
|
||||
load_attr.func_info = prog->func_info;
|
||||
load_attr.func_info_rec_size = prog->func_info_rec_size;
|
||||
load_attr.func_info_cnt = prog->func_info_cnt;
|
||||
@@ -5903,13 +5902,15 @@ int libbpf_num_possible_cpus(void)
|
||||
static const char *fcpu = "/sys/devices/system/cpu/possible";
|
||||
int len = 0, n = 0, il = 0, ir = 0;
|
||||
unsigned int start = 0, end = 0;
|
||||
int tmp_cpus = 0;
|
||||
static int cpus;
|
||||
char buf[128];
|
||||
int error = 0;
|
||||
int fd = -1;
|
||||
|
||||
if (cpus > 0)
|
||||
return cpus;
|
||||
tmp_cpus = READ_ONCE(cpus);
|
||||
if (tmp_cpus > 0)
|
||||
return tmp_cpus;
|
||||
|
||||
fd = open(fcpu, O_RDONLY);
|
||||
if (fd < 0) {
|
||||
@@ -5932,7 +5933,7 @@ int libbpf_num_possible_cpus(void)
|
||||
}
|
||||
buf[len] = '\0';
|
||||
|
||||
for (ir = 0, cpus = 0; ir <= len; ir++) {
|
||||
for (ir = 0, tmp_cpus = 0; ir <= len; ir++) {
|
||||
/* Each sub string separated by ',' has format \d+-\d+ or \d+ */
|
||||
if (buf[ir] == ',' || buf[ir] == '\0') {
|
||||
buf[ir] = '\0';
|
||||
@@ -5944,13 +5945,15 @@ int libbpf_num_possible_cpus(void)
|
||||
} else if (n == 1) {
|
||||
end = start;
|
||||
}
|
||||
cpus += end - start + 1;
|
||||
tmp_cpus += end - start + 1;
|
||||
il = ir + 1;
|
||||
}
|
||||
}
|
||||
if (cpus <= 0) {
|
||||
pr_warning("Invalid #CPUs %d from %s\n", cpus, fcpu);
|
||||
if (tmp_cpus <= 0) {
|
||||
pr_warning("Invalid #CPUs %d from %s\n", tmp_cpus, fcpu);
|
||||
return -EINVAL;
|
||||
}
|
||||
return cpus;
|
||||
|
||||
WRITE_ONCE(cpus, tmp_cpus);
|
||||
return tmp_cpus;
|
||||
}
|
||||
|
||||
@@ -242,7 +242,7 @@ $(OUTPUT)doc.dep : $(wildcard *.txt) build-docdep.perl
|
||||
$(PERL_PATH) ./build-docdep.perl >$@+ $(QUIET_STDERR) && \
|
||||
mv $@+ $@
|
||||
|
||||
-include $(OUPTUT)doc.dep
|
||||
-include $(OUTPUT)doc.dep
|
||||
|
||||
_cmds_txt = cmds-ancillaryinterrogators.txt \
|
||||
cmds-ancillarymanipulators.txt \
|
||||
|
||||
@@ -6,8 +6,9 @@
|
||||
#include "machine.h"
|
||||
#include "api/fs/fs.h"
|
||||
#include "debug.h"
|
||||
#include "symbol.h"
|
||||
|
||||
int arch__fix_module_text_start(u64 *start, const char *name)
|
||||
int arch__fix_module_text_start(u64 *start, u64 *size, const char *name)
|
||||
{
|
||||
u64 m_start = *start;
|
||||
char path[PATH_MAX];
|
||||
@@ -17,7 +18,35 @@ int arch__fix_module_text_start(u64 *start, const char *name)
|
||||
if (sysfs__read_ull(path, (unsigned long long *)start) < 0) {
|
||||
pr_debug2("Using module %s start:%#lx\n", path, m_start);
|
||||
*start = m_start;
|
||||
} else {
|
||||
/* Successful read of the modules segment text start address.
|
||||
* Calculate difference between module start address
|
||||
* in memory and module text segment start address.
|
||||
* For example module load address is 0x3ff8011b000
|
||||
* (from /proc/modules) and module text segment start
|
||||
* address is 0x3ff8011b870 (from file above).
|
||||
*
|
||||
* Adjust the module size and subtract the GOT table
|
||||
* size located at the beginning of the module.
|
||||
*/
|
||||
*size -= (*start - m_start);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* On s390 kernel text segment start is located at very low memory addresses,
|
||||
* for example 0x10000. Modules are located at very high memory addresses,
|
||||
* for example 0x3ff xxxx xxxx. The gap between end of kernel text segment
|
||||
* and beginning of first module's text segment is very big.
|
||||
* Therefore do not fill this gap and do not assign it to the kernel dso map.
|
||||
*/
|
||||
void arch__symbols__fixup_end(struct symbol *p, struct symbol *c)
|
||||
{
|
||||
if (strchr(p->name, '[') == NULL && strchr(c->name, '['))
|
||||
/* Last kernel symbol mapped to end of page */
|
||||
p->end = roundup(p->end, page_size);
|
||||
else
|
||||
p->end = c->start;
|
||||
pr_debug4("%s sym:%s end:%#lx\n", __func__, p->name, p->end);
|
||||
}
|
||||
|
||||
@@ -379,8 +379,10 @@ static u8 *alloc_data(ssize_t bytes0, int map_flags,
|
||||
|
||||
/* Allocate and initialize all memory on CPU#0: */
|
||||
if (init_cpu0) {
|
||||
orig_mask = bind_to_node(0);
|
||||
bind_to_memnode(0);
|
||||
int node = numa_node_of_cpu(0);
|
||||
|
||||
orig_mask = bind_to_node(node);
|
||||
bind_to_memnode(node);
|
||||
}
|
||||
|
||||
bytes = bytes0 + HPSIZE;
|
||||
|
||||
@@ -173,7 +173,7 @@ static int set_tracing_cpumask(struct cpu_map *cpumap)
|
||||
int last_cpu;
|
||||
|
||||
last_cpu = cpu_map__cpu(cpumap, cpumap->nr - 1);
|
||||
mask_size = (last_cpu + 3) / 4 + 1;
|
||||
mask_size = last_cpu / 4 + 2; /* one more byte for EOS */
|
||||
mask_size += last_cpu / 32; /* ',' is needed for every 32th cpus */
|
||||
|
||||
cpumask = malloc(mask_size);
|
||||
|
||||
@@ -453,6 +453,7 @@ static struct fixed {
|
||||
{ "inst_retired.any_p", "event=0xc0" },
|
||||
{ "cpu_clk_unhalted.ref", "event=0x0,umask=0x03" },
|
||||
{ "cpu_clk_unhalted.thread", "event=0x3c" },
|
||||
{ "cpu_clk_unhalted.core", "event=0x3c" },
|
||||
{ "cpu_clk_unhalted.thread_any", "event=0x3c,any=1" },
|
||||
{ NULL, NULL},
|
||||
};
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
#include "../string2.h"
|
||||
#include "../config.h"
|
||||
#include "../../perf.h"
|
||||
#include "../util/util.h"
|
||||
#include "../util/string2.h"
|
||||
#include "../util/config.h"
|
||||
#include "../perf.h"
|
||||
#include "libslang.h"
|
||||
#include "ui.h"
|
||||
#include "util.h"
|
||||
@@ -14,7 +15,7 @@
|
||||
#include "browser.h"
|
||||
#include "helpline.h"
|
||||
#include "keysyms.h"
|
||||
#include "../color.h"
|
||||
#include "../util/color.h"
|
||||
#include <linux/ctype.h>
|
||||
#include <linux/zalloc.h>
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
#include <linux/kernel.h>
|
||||
#include "../cache.h"
|
||||
#include "../../util/cache.h"
|
||||
#include "../progress.h"
|
||||
#include "../libslang.h"
|
||||
#include "../ui.h"
|
||||
|
||||
@@ -1122,7 +1122,7 @@ static int disasm_line__parse(char *line, const char **namep, char **rawp)
|
||||
goto out;
|
||||
|
||||
(*rawp)[0] = tmp;
|
||||
*rawp = skip_spaces(*rawp);
|
||||
*rawp = strim(*rawp);
|
||||
|
||||
return 0;
|
||||
|
||||
|
||||
@@ -751,7 +751,10 @@ size_t cpu_map__snprint_mask(struct cpu_map *map, char *buf, size_t size)
|
||||
unsigned char *bitmap;
|
||||
int last_cpu = cpu_map__cpu(map, map->nr - 1);
|
||||
|
||||
bitmap = zalloc((last_cpu + 7) / 8);
|
||||
if (buf == NULL)
|
||||
return 0;
|
||||
|
||||
bitmap = zalloc(last_cpu / 8 + 1);
|
||||
if (bitmap == NULL) {
|
||||
buf[0] = '\0';
|
||||
return 0;
|
||||
|
||||
@@ -1378,6 +1378,7 @@ static int machine__set_modules_path(struct machine *machine)
|
||||
return map_groups__set_modules_path_dir(&machine->kmaps, modules_path, 0);
|
||||
}
|
||||
int __weak arch__fix_module_text_start(u64 *start __maybe_unused,
|
||||
u64 *size __maybe_unused,
|
||||
const char *name __maybe_unused)
|
||||
{
|
||||
return 0;
|
||||
@@ -1389,7 +1390,7 @@ static int machine__create_module(void *arg, const char *name, u64 start,
|
||||
struct machine *machine = arg;
|
||||
struct map *map;
|
||||
|
||||
if (arch__fix_module_text_start(&start, name) < 0)
|
||||
if (arch__fix_module_text_start(&start, &size, name) < 0)
|
||||
return -1;
|
||||
|
||||
map = machine__findnew_module_map(machine, start, name);
|
||||
|
||||
@@ -222,7 +222,7 @@ struct symbol *machine__find_kernel_symbol_by_name(struct machine *machine,
|
||||
|
||||
struct map *machine__findnew_module_map(struct machine *machine, u64 start,
|
||||
const char *filename);
|
||||
int arch__fix_module_text_start(u64 *start, const char *name);
|
||||
int arch__fix_module_text_start(u64 *start, u64 *size, const char *name);
|
||||
|
||||
int machine__load_kallsyms(struct machine *machine, const char *filename);
|
||||
|
||||
|
||||
@@ -92,6 +92,11 @@ static int prefix_underscores_count(const char *str)
|
||||
return tail - str;
|
||||
}
|
||||
|
||||
void __weak arch__symbols__fixup_end(struct symbol *p, struct symbol *c)
|
||||
{
|
||||
p->end = c->start;
|
||||
}
|
||||
|
||||
const char * __weak arch__normalize_symbol_name(const char *name)
|
||||
{
|
||||
return name;
|
||||
@@ -218,7 +223,7 @@ void symbols__fixup_end(struct rb_root_cached *symbols)
|
||||
curr = rb_entry(nd, struct symbol, rb_node);
|
||||
|
||||
if (prev->end == prev->start && prev->end != curr->start)
|
||||
prev->end = curr->start;
|
||||
arch__symbols__fixup_end(prev, curr);
|
||||
}
|
||||
|
||||
/* Last entry */
|
||||
|
||||
@@ -288,6 +288,7 @@ const char *arch__normalize_symbol_name(const char *name);
|
||||
#define SYMBOL_A 0
|
||||
#define SYMBOL_B 1
|
||||
|
||||
void arch__symbols__fixup_end(struct symbol *p, struct symbol *c);
|
||||
int arch__compare_symbol_names(const char *namea, const char *nameb);
|
||||
int arch__compare_symbol_names_n(const char *namea, const char *nameb,
|
||||
unsigned int n);
|
||||
|
||||
@@ -214,14 +214,24 @@ struct comm *thread__comm(const struct thread *thread)
|
||||
|
||||
struct comm *thread__exec_comm(const struct thread *thread)
|
||||
{
|
||||
struct comm *comm, *last = NULL;
|
||||
struct comm *comm, *last = NULL, *second_last = NULL;
|
||||
|
||||
list_for_each_entry(comm, &thread->comm_list, list) {
|
||||
if (comm->exec)
|
||||
return comm;
|
||||
second_last = last;
|
||||
last = comm;
|
||||
}
|
||||
|
||||
/*
|
||||
* 'last' with no start time might be the parent's comm of a synthesized
|
||||
* thread (created by processing a synthesized fork event). For a main
|
||||
* thread, that is very probably wrong. Prefer a later comm to avoid
|
||||
* that case.
|
||||
*/
|
||||
if (second_last && !last->start && thread->pid_ == thread->tid)
|
||||
return second_last;
|
||||
|
||||
return last;
|
||||
}
|
||||
|
||||
|
||||
@@ -159,3 +159,31 @@
|
||||
.errstr = "loop detected",
|
||||
.prog_type = BPF_PROG_TYPE_TRACEPOINT,
|
||||
},
|
||||
{
|
||||
"not-taken loop with back jump to 1st insn",
|
||||
.insns = {
|
||||
BPF_MOV64_IMM(BPF_REG_0, 123),
|
||||
BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 4, -2),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
.result = ACCEPT,
|
||||
.prog_type = BPF_PROG_TYPE_XDP,
|
||||
.retval = 123,
|
||||
},
|
||||
{
|
||||
"taken loop with back jump to 1st insn",
|
||||
.insns = {
|
||||
BPF_MOV64_IMM(BPF_REG_1, 10),
|
||||
BPF_MOV64_IMM(BPF_REG_2, 0),
|
||||
BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 1),
|
||||
BPF_EXIT_INSN(),
|
||||
BPF_ALU64_REG(BPF_ADD, BPF_REG_2, BPF_REG_1),
|
||||
BPF_ALU64_IMM(BPF_SUB, BPF_REG_1, 1),
|
||||
BPF_JMP_IMM(BPF_JNE, BPF_REG_1, 0, -3),
|
||||
BPF_MOV64_REG(BPF_REG_0, BPF_REG_2),
|
||||
BPF_EXIT_INSN(),
|
||||
},
|
||||
.result = ACCEPT,
|
||||
.prog_type = BPF_PROG_TYPE_XDP,
|
||||
.retval = 55,
|
||||
},
|
||||
|
||||
3
tools/testing/selftests/kvm/.gitignore
vendored
3
tools/testing/selftests/kvm/.gitignore
vendored
@@ -1,7 +1,7 @@
|
||||
/s390x/sync_regs_test
|
||||
/x86_64/cr4_cpuid_sync_test
|
||||
/x86_64/evmcs_test
|
||||
/x86_64/hyperv_cpuid
|
||||
/x86_64/kvm_create_max_vcpus
|
||||
/x86_64/mmio_warning_test
|
||||
/x86_64/platform_info_test
|
||||
/x86_64/set_sregs_test
|
||||
@@ -13,3 +13,4 @@
|
||||
/x86_64/vmx_tsc_adjust_test
|
||||
/clear_dirty_log_test
|
||||
/dirty_log_test
|
||||
/kvm_create_max_vcpus
|
||||
|
||||
3
tools/testing/selftests/kvm/config
Normal file
3
tools/testing/selftests/kvm/config
Normal file
@@ -0,0 +1,3 @@
|
||||
CONFIG_KVM=y
|
||||
CONFIG_KVM_INTEL=y
|
||||
CONFIG_KVM_AMD=y
|
||||
@@ -30,7 +30,7 @@ do_test() {
|
||||
ip netns exec "${NETNS}" ./tcp_fastopen_backup_key "$1"
|
||||
val=$(ip netns exec "${NETNS}" nstat -az | \
|
||||
grep TcpExtTCPFastOpenPassiveFail | awk '{print $2}')
|
||||
if [ $val -ne 0 ]; then
|
||||
if [ "$val" != 0 ]; then
|
||||
echo "FAIL: TcpExtTCPFastOpenPassiveFail non-zero"
|
||||
return 1
|
||||
fi
|
||||
|
||||
@@ -321,4 +321,52 @@ else
|
||||
ip netns exec nsr1 nft list ruleset
|
||||
fi
|
||||
|
||||
KEY_SHA="0x"$(ps -xaf | sha1sum | cut -d " " -f 1)
|
||||
KEY_AES="0x"$(ps -xaf | md5sum | cut -d " " -f 1)
|
||||
SPI1=$RANDOM
|
||||
SPI2=$RANDOM
|
||||
|
||||
if [ $SPI1 -eq $SPI2 ]; then
|
||||
SPI2=$((SPI2+1))
|
||||
fi
|
||||
|
||||
do_esp() {
|
||||
local ns=$1
|
||||
local me=$2
|
||||
local remote=$3
|
||||
local lnet=$4
|
||||
local rnet=$5
|
||||
local spi_out=$6
|
||||
local spi_in=$7
|
||||
|
||||
ip -net $ns xfrm state add src $remote dst $me proto esp spi $spi_in enc aes $KEY_AES auth sha1 $KEY_SHA mode tunnel sel src $rnet dst $lnet
|
||||
ip -net $ns xfrm state add src $me dst $remote proto esp spi $spi_out enc aes $KEY_AES auth sha1 $KEY_SHA mode tunnel sel src $lnet dst $rnet
|
||||
|
||||
# to encrypt packets as they go out (includes forwarded packets that need encapsulation)
|
||||
ip -net $ns xfrm policy add src $lnet dst $rnet dir out tmpl src $me dst $remote proto esp mode tunnel priority 1 action allow
|
||||
# to fwd decrypted packets after esp processing:
|
||||
ip -net $ns xfrm policy add src $rnet dst $lnet dir fwd tmpl src $remote dst $me proto esp mode tunnel priority 1 action allow
|
||||
|
||||
}
|
||||
|
||||
do_esp nsr1 192.168.10.1 192.168.10.2 10.0.1.0/24 10.0.2.0/24 $SPI1 $SPI2
|
||||
|
||||
do_esp nsr2 192.168.10.2 192.168.10.1 10.0.2.0/24 10.0.1.0/24 $SPI2 $SPI1
|
||||
|
||||
ip netns exec nsr1 nft delete table ip nat
|
||||
|
||||
# restore default routes
|
||||
ip -net ns2 route del 192.168.10.1 via 10.0.2.1
|
||||
ip -net ns2 route add default via 10.0.2.1
|
||||
ip -net ns2 route add default via dead:2::1
|
||||
|
||||
test_tcp_forwarding ns1 ns2
|
||||
if [ $? -eq 0 ] ;then
|
||||
echo "PASS: ipsec tunnel mode for ns1/ns2"
|
||||
else
|
||||
echo "FAIL: ipsec tunnel mode for ns1/ns2"
|
||||
ip netns exec nsr1 nft list ruleset 1>&2
|
||||
ip netns exec nsr1 cat /proc/net/xfrm_stat 1>&2
|
||||
fi
|
||||
|
||||
exit $ret
|
||||
|
||||
@@ -670,5 +670,52 @@
|
||||
"teardown": [
|
||||
"$TC actions flush action skbedit"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "630c",
|
||||
"name": "Add batch of 32 skbedit actions with all parameters and cookie",
|
||||
"category": [
|
||||
"actions",
|
||||
"skbedit"
|
||||
],
|
||||
"setup": [
|
||||
[
|
||||
"$TC actions flush action skbedit",
|
||||
0,
|
||||
1,
|
||||
255
|
||||
]
|
||||
],
|
||||
"cmdUnderTest": "bash -c \"for i in \\`seq 1 32\\`; do cmd=\\\"action skbedit queue_mapping 2 priority 10 mark 7/0xaabbccdd ptype host inheritdsfield index \\$i cookie aabbccddeeff112233445566778800a1 \\\"; args=\"\\$args\\$cmd\"; done && $TC actions add \\$args\"",
|
||||
"expExitCode": "0",
|
||||
"verifyCmd": "$TC actions list action skbedit",
|
||||
"matchPattern": "^[ \t]+index [0-9]+ ref",
|
||||
"matchCount": "32",
|
||||
"teardown": [
|
||||
"$TC actions flush action skbedit"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "706d",
|
||||
"name": "Delete batch of 32 skbedit actions with all parameters",
|
||||
"category": [
|
||||
"actions",
|
||||
"skbedit"
|
||||
],
|
||||
"setup": [
|
||||
[
|
||||
"$TC actions flush action skbedit",
|
||||
0,
|
||||
1,
|
||||
255
|
||||
],
|
||||
"bash -c \"for i in \\`seq 1 32\\`; do cmd=\\\"action skbedit queue_mapping 2 priority 10 mark 7/0xaabbccdd ptype host inheritdsfield index \\$i \\\"; args=\\\"\\$args\\$cmd\\\"; done && $TC actions add \\$args\""
|
||||
],
|
||||
"cmdUnderTest": "bash -c \"for i in \\`seq 1 32\\`; do cmd=\\\"action skbedit index \\$i \\\"; args=\"\\$args\\$cmd\"; done && $TC actions del \\$args\"",
|
||||
"expExitCode": "0",
|
||||
"verifyCmd": "$TC actions list action skbedit",
|
||||
"matchPattern": "^[ \t]+index [0-9]+ ref",
|
||||
"matchCount": "0",
|
||||
"teardown": []
|
||||
}
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user