mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-17 01:26:57 +07:00
Merge branch 'fixes' into next
Merge our fixes branch again, this has a couple of build fixes and also a change to do_syscall_trace_enter() that will conflict with a patch we want to apply in next.
This commit is contained in:
commit
4d6a198273
@ -197,7 +197,7 @@ $(obj)/empty.c:
|
||||
$(obj)/zImage.coff.lds $(obj)/zImage.ps3.lds : $(obj)/%: $(srctree)/$(src)/%.S
|
||||
$(Q)cp $< $@
|
||||
|
||||
$(obj)/serial.c: $(obj)/autoconf.h
|
||||
$(srctree)/$(src)/serial.c: $(obj)/autoconf.h
|
||||
|
||||
$(obj)/autoconf.h: $(obj)/%: $(objtree)/include/generated/%
|
||||
$(Q)cp $< $@
|
||||
|
@ -15,7 +15,7 @@
|
||||
RELA = 7
|
||||
RELACOUNT = 0x6ffffff9
|
||||
|
||||
.text
|
||||
.data
|
||||
/* A procedure descriptor used when booting this as a COFF file.
|
||||
* When making COFF, this comes first in the link and we're
|
||||
* linked at 0x500000.
|
||||
@ -23,6 +23,8 @@ RELACOUNT = 0x6ffffff9
|
||||
.globl _zimage_start_opd
|
||||
_zimage_start_opd:
|
||||
.long 0x500000, 0, 0, 0
|
||||
.text
|
||||
b _zimage_start
|
||||
|
||||
#ifdef __powerpc64__
|
||||
.balign 8
|
||||
|
@ -26,6 +26,8 @@
|
||||
#include <asm/ptrace.h>
|
||||
#include <asm/reg.h>
|
||||
|
||||
#define perf_arch_bpf_user_pt_regs(regs) ®s->user_regs
|
||||
|
||||
/*
|
||||
* Overload regs->result to specify whether we should use the MSR (result
|
||||
* is zero) or the SIAR (result is non zero).
|
||||
|
@ -1,7 +1,6 @@
|
||||
# UAPI Header export list
|
||||
include include/uapi/asm-generic/Kbuild.asm
|
||||
|
||||
generic-y += bpf_perf_event.h
|
||||
generic-y += param.h
|
||||
generic-y += poll.h
|
||||
generic-y += resource.h
|
||||
|
9
arch/powerpc/include/uapi/asm/bpf_perf_event.h
Normal file
9
arch/powerpc/include/uapi/asm/bpf_perf_event.h
Normal file
@ -0,0 +1,9 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#ifndef _UAPI__ASM_BPF_PERF_EVENT_H__
|
||||
#define _UAPI__ASM_BPF_PERF_EVENT_H__
|
||||
|
||||
#include <asm/ptrace.h>
|
||||
|
||||
typedef struct user_pt_regs bpf_user_pt_regs_t;
|
||||
|
||||
#endif /* _UAPI__ASM_BPF_PERF_EVENT_H__ */
|
@ -372,6 +372,8 @@ void __init find_legacy_serial_ports(void)
|
||||
|
||||
/* Now find out if one of these is out firmware console */
|
||||
path = of_get_property(of_chosen, "linux,stdout-path", NULL);
|
||||
if (path == NULL)
|
||||
path = of_get_property(of_chosen, "stdout-path", NULL);
|
||||
if (path != NULL) {
|
||||
stdout = of_find_node_by_path(path);
|
||||
if (stdout)
|
||||
@ -596,8 +598,10 @@ static int __init check_legacy_serial_console(void)
|
||||
/* We are getting a weird phandle from OF ... */
|
||||
/* ... So use the full path instead */
|
||||
name = of_get_property(of_chosen, "linux,stdout-path", NULL);
|
||||
if (name == NULL)
|
||||
name = of_get_property(of_chosen, "stdout-path", NULL);
|
||||
if (name == NULL) {
|
||||
DBG(" no linux,stdout-path !\n");
|
||||
DBG(" no stdout-path !\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
prom_stdout = of_find_node_by_path(name);
|
||||
|
@ -34,5 +34,10 @@ void arch_teardown_msi_irqs(struct pci_dev *dev)
|
||||
{
|
||||
struct pci_controller *phb = pci_bus_to_host(dev->bus);
|
||||
|
||||
phb->controller_ops.teardown_msi_irqs(dev);
|
||||
/*
|
||||
* We can be called even when arch_setup_msi_irqs() returns -ENOSYS,
|
||||
* so check the pointer again.
|
||||
*/
|
||||
if (phb->controller_ops.teardown_msi_irqs)
|
||||
phb->controller_ops.teardown_msi_irqs(dev);
|
||||
}
|
||||
|
@ -3266,12 +3266,17 @@ long do_syscall_trace_enter(struct pt_regs *regs)
|
||||
user_exit();
|
||||
|
||||
if (test_thread_flag(TIF_SYSCALL_EMU)) {
|
||||
ptrace_report_syscall(regs);
|
||||
/*
|
||||
* A nonzero return code from tracehook_report_syscall_entry()
|
||||
* tells us to prevent the syscall execution, but we are not
|
||||
* going to execute it anyway.
|
||||
*
|
||||
* Returning -1 will skip the syscall execution. We want to
|
||||
* avoid clobbering any register also, thus, not 'gotoing'
|
||||
* skip label.
|
||||
*/
|
||||
if (tracehook_report_syscall_entry(regs))
|
||||
;
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -19,6 +19,7 @@
|
||||
#include <linux/hugetlb.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/highmem.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <asm/fixmap.h>
|
||||
|
@ -188,15 +188,20 @@ int __meminit vmemmap_populate(unsigned long start, unsigned long end, int node,
|
||||
pr_debug("vmemmap_populate %lx..%lx, node %d\n", start, end, node);
|
||||
|
||||
for (; start < end; start += page_size) {
|
||||
void *p;
|
||||
void *p = NULL;
|
||||
int rc;
|
||||
|
||||
if (vmemmap_populated(start, page_size))
|
||||
continue;
|
||||
|
||||
/*
|
||||
* Allocate from the altmap first if we have one. This may
|
||||
* fail due to alignment issues when using 16MB hugepages, so
|
||||
* fall back to system memory if the altmap allocation fail.
|
||||
*/
|
||||
if (altmap)
|
||||
p = altmap_alloc_block_buf(page_size, altmap);
|
||||
else
|
||||
if (!p)
|
||||
p = vmemmap_alloc_block_buf(page_size, node);
|
||||
if (!p)
|
||||
return -ENOMEM;
|
||||
@ -255,8 +260,15 @@ void __ref vmemmap_free(unsigned long start, unsigned long end,
|
||||
{
|
||||
unsigned long page_size = 1 << mmu_psize_defs[mmu_vmemmap_psize].shift;
|
||||
unsigned long page_order = get_order(page_size);
|
||||
unsigned long alt_start = ~0, alt_end = ~0;
|
||||
unsigned long base_pfn;
|
||||
|
||||
start = _ALIGN_DOWN(start, page_size);
|
||||
if (altmap) {
|
||||
alt_start = altmap->base_pfn;
|
||||
alt_end = altmap->base_pfn + altmap->reserve +
|
||||
altmap->free + altmap->alloc + altmap->align;
|
||||
}
|
||||
|
||||
pr_debug("vmemmap_free %lx...%lx\n", start, end);
|
||||
|
||||
@ -280,8 +292,9 @@ void __ref vmemmap_free(unsigned long start, unsigned long end,
|
||||
page = pfn_to_page(addr >> PAGE_SHIFT);
|
||||
section_base = pfn_to_page(vmemmap_section_start(start));
|
||||
nr_pages = 1 << page_order;
|
||||
base_pfn = PHYS_PFN(addr);
|
||||
|
||||
if (altmap) {
|
||||
if (base_pfn >= alt_start && base_pfn < alt_end) {
|
||||
vmem_altmap_free(altmap, nr_pages);
|
||||
} else if (PageReserved(page)) {
|
||||
/* allocated from bootmem */
|
||||
|
@ -140,8 +140,7 @@ config IBMEBUS
|
||||
Bus device driver for GX bus based adapters.
|
||||
|
||||
config PAPR_SCM
|
||||
depends on PPC_PSERIES && MEMORY_HOTPLUG
|
||||
select LIBNVDIMM
|
||||
depends on PPC_PSERIES && MEMORY_HOTPLUG && LIBNVDIMM
|
||||
tristate "Support for the PAPR Storage Class Memory interface"
|
||||
help
|
||||
Enable access to hypervisor provided storage class memory.
|
||||
|
@ -55,7 +55,7 @@ static int drc_pmem_bind(struct papr_scm_priv *p)
|
||||
do {
|
||||
rc = plpar_hcall(H_SCM_BIND_MEM, ret, p->drc_index, 0,
|
||||
p->blocks, BIND_ANY_ADDR, token);
|
||||
token = be64_to_cpu(ret[0]);
|
||||
token = ret[0];
|
||||
cond_resched();
|
||||
} while (rc == H_BUSY);
|
||||
|
||||
@ -64,7 +64,7 @@ static int drc_pmem_bind(struct papr_scm_priv *p)
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
p->bound_addr = be64_to_cpu(ret[1]);
|
||||
p->bound_addr = ret[1];
|
||||
|
||||
dev_dbg(&p->pdev->dev, "bound drc %x to %pR\n", p->drc_index, &p->res);
|
||||
|
||||
@ -82,7 +82,7 @@ static int drc_pmem_unbind(struct papr_scm_priv *p)
|
||||
do {
|
||||
rc = plpar_hcall(H_SCM_UNBIND_MEM, ret, p->drc_index,
|
||||
p->bound_addr, p->blocks, token);
|
||||
token = be64_to_cpu(ret);
|
||||
token = ret[0];
|
||||
cond_resched();
|
||||
} while (rc == H_BUSY);
|
||||
|
||||
@ -223,6 +223,9 @@ static int papr_scm_nvdimm_init(struct papr_scm_priv *p)
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (nvdimm_bus_check_dimm_count(p->bus, 1))
|
||||
goto err;
|
||||
|
||||
/* now add the region */
|
||||
|
||||
memset(&mapping, 0, sizeof(mapping));
|
||||
@ -257,9 +260,12 @@ err: nvdimm_bus_unregister(p->bus);
|
||||
|
||||
static int papr_scm_probe(struct platform_device *pdev)
|
||||
{
|
||||
uint32_t drc_index, metadata_size, unit_cap[2];
|
||||
struct device_node *dn = pdev->dev.of_node;
|
||||
u32 drc_index, metadata_size;
|
||||
u64 blocks, block_size;
|
||||
struct papr_scm_priv *p;
|
||||
const char *uuid_str;
|
||||
u64 uuid[2];
|
||||
int rc;
|
||||
|
||||
/* check we have all the required DT properties */
|
||||
@ -268,8 +274,18 @@ static int papr_scm_probe(struct platform_device *pdev)
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
if (of_property_read_u32_array(dn, "ibm,unit-capacity", unit_cap, 2)) {
|
||||
dev_err(&pdev->dev, "%pOF: missing unit-capacity!\n", dn);
|
||||
if (of_property_read_u64(dn, "ibm,block-size", &block_size)) {
|
||||
dev_err(&pdev->dev, "%pOF: missing block-size!\n", dn);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
if (of_property_read_u64(dn, "ibm,number-of-blocks", &blocks)) {
|
||||
dev_err(&pdev->dev, "%pOF: missing number-of-blocks!\n", dn);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
if (of_property_read_string(dn, "ibm,unit-guid", &uuid_str)) {
|
||||
dev_err(&pdev->dev, "%pOF: missing unit-guid!\n", dn);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
@ -282,8 +298,13 @@ static int papr_scm_probe(struct platform_device *pdev)
|
||||
|
||||
p->dn = dn;
|
||||
p->drc_index = drc_index;
|
||||
p->block_size = unit_cap[0];
|
||||
p->blocks = unit_cap[1];
|
||||
p->block_size = block_size;
|
||||
p->blocks = blocks;
|
||||
|
||||
/* We just need to ensure that set cookies are unique across */
|
||||
uuid_parse(uuid_str, (uuid_t *) uuid);
|
||||
p->nd_set.cookie1 = uuid[0];
|
||||
p->nd_set.cookie2 = uuid[1];
|
||||
|
||||
/* might be zero */
|
||||
p->metadata_size = metadata_size;
|
||||
@ -296,7 +317,7 @@ static int papr_scm_probe(struct platform_device *pdev)
|
||||
|
||||
/* setup the resource for the newly bound range */
|
||||
p->res.start = p->bound_addr;
|
||||
p->res.end = p->bound_addr + p->blocks * p->block_size;
|
||||
p->res.end = p->bound_addr + p->blocks * p->block_size - 1;
|
||||
p->res.name = pdev->name;
|
||||
p->res.flags = IORESOURCE_MEM;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user