mirror of
https://github.com/torvalds/linux.git
synced 2026-05-05 23:05:25 -04:00
Merge branches 'for-next/misc', 'for-next/kselftest', 'for-next/efi-preempt', 'for-next/assembler-macro', 'for-next/typos', 'for-next/sme-ptrace-disable', 'for-next/local-tlbi-page-reused', 'for-next/mpam', 'for-next/acpi' and 'for-next/documentation', remote-tracking branch 'arm64/for-next/perf' into for-next/core
* arm64/for-next/perf: perf: arm_spe: Add support for filtering on data source perf: Add perf_event_attr::config4 perf/imx_ddr: Add support for PMU in DB (system interconnects) perf/imx_ddr: Get and enable optional clks perf/imx_ddr: Move ida_alloc() from ddr_perf_init() to ddr_perf_probe() dt-bindings: perf: fsl-imx-ddr: Add compatible string for i.MX8QM, i.MX8QXP and i.MX8DXL arch_topology: Provide a stub topology_core_has_smt() for !CONFIG_GENERIC_ARCH_TOPOLOGY perf/arm-ni: Fix and optimise register offset calculation perf: arm_pmuv3: Add new Cortex and C1 CPU PMUs perf: arm_cspmu: fix error handling in arm_cspmu_impl_unregister() perf/arm-ni: Add NoC S3 support perf/arm_cspmu: nvidia: Add pmevfiltr2 support perf/arm_cspmu: nvidia: Add revision id matching perf/arm_cspmu: Add pmpidr support perf/arm_cspmu: Add callback to reset filter config perf: arm_pmuv3: Don't use PMCCNTR_EL0 on SMT cores * for-next/misc: : Miscellaneous patches arm64: atomics: lse: Remove unused parameters from ATOMIC_FETCH_OP_AND macros arm64: remove duplicate ARCH_HAS_MEM_ENCRYPT arm64: mm: use untagged address to calculate page index arm64: mm: make linear mapping permission update more robust for patial range arm64/mm: Elide TLB flush in certain pte protection transitions arm64/mm: Rename try_pgd_pgtable_alloc_init_mm arm64/mm: Allow __create_pgd_mapping() to propagate pgtable_alloc() errors arm64: add unlikely hint to MTE async fault check in el0_svc_common arm64: acpi: add newline to deferred APEI warning arm64: entry: Clean out some indirection arm64/mm: Ensure PGD_SIZE is aligned to 64 bytes when PA_BITS = 52 arm64/mm: Drop cpu_set_[default|idmap]_tcr_t0sz() arm64: remove unused ARCH_PFN_OFFSET arm64: use SOFTIRQ_ON_OWN_STACK for enabling softirq stack arm64: Remove assertion on CONFIG_VMAP_STACK * for-next/kselftest: : arm64 kselftest patches kselftest/arm64: Align zt-test register dumps * for-next/efi-preempt: : arm64: Make EFI calls preemptible arm64/efi: Call EFI runtime services without disabling preemption arm64/efi: Move uaccess en/disable out of efi_set_pgd() arm64/efi: Drop efi_rt_lock spinlock from EFI arch wrapper arm64/fpsimd: Permit kernel mode NEON with IRQs off arm64/fpsimd: Don't warn when EFI execution context is preemptible efi/runtime-wrappers: Keep track of the efi_runtime_lock owner efi: Add missing static initializer for efi_mm::cpus_allowed_lock * for-next/assembler-macro: : arm64: Replace __ASSEMBLY__ with __ASSEMBLER__ in headers arm64: Replace __ASSEMBLY__ with __ASSEMBLER__ in non-uapi headers arm64: Replace __ASSEMBLY__ with __ASSEMBLER__ in uapi headers * for-next/typos: : Random typo/spelling fixes arm64: Fix double word in comments arm64: Fix typos and spelling errors in comments * for-next/sme-ptrace-disable: : Support disabling streaming mode via ptrace on SME only systems kselftest/arm64: Cover disabling streaming mode without SVE in fp-ptrace kselftst/arm64: Test NT_ARM_SVE FPSIMD format writes on non-SVE systems arm64/sme: Support disabling streaming mode via ptrace on SME only systems * for-next/local-tlbi-page-reused: : arm64, mm: avoid TLBI broadcast if page reused in write fault arm64, tlbflush: don't TLBI broadcast if page reused in write fault mm: add spurious fault fixing support for huge pmd * for-next/mpam: (34 commits) : Basic Arm MPAM driver (more to follow) MAINTAINERS: new entry for MPAM Driver arm_mpam: Add kunit tests for props_mismatch() arm_mpam: Add kunit test for bitmap reset arm_mpam: Add helper to reset saved mbwu state arm_mpam: Use long MBWU counters if supported arm_mpam: Probe for long/lwd mbwu counters arm_mpam: Consider overflow in bandwidth counter state arm_mpam: Track bandwidth counter state for power management arm_mpam: Add mpam_msmon_read() to read monitor value arm_mpam: Add helpers to allocate monitors arm_mpam: Probe and reset the rest of the features arm_mpam: Allow configuration to be applied and restored during cpu online arm_mpam: Use a static key to indicate when mpam is enabled arm_mpam: Register and enable IRQs arm_mpam: Extend reset logic to allow devices to be reset any time arm_mpam: Add a helper to touch an MSC from any CPU arm_mpam: Reset MSC controls from cpuhp callbacks arm_mpam: Merge supported features during mpam_enable() into mpam_class arm_mpam: Probe the hardware features resctrl supports arm_mpam: Add helpers for managing the locking around the mon_sel registers ... * for-next/acpi: : arm64 acpi updates ACPI: GTDT: Get rid of acpi_arch_timer_mem_init() * for-next/documentation: : arm64 Documentation updates Documentation/arm64: Fix the typo of register names
This commit is contained in:
@@ -1071,7 +1071,7 @@ static bool sve_write_supported(struct test_config *config)
|
||||
|
||||
static bool sve_write_fpsimd_supported(struct test_config *config)
|
||||
{
|
||||
if (!sve_supported())
|
||||
if (!sve_supported() && !sme_supported())
|
||||
return false;
|
||||
|
||||
if ((config->svcr_in & SVCR_ZA) != (config->svcr_expected & SVCR_ZA))
|
||||
@@ -1231,9 +1231,6 @@ static void sve_write_fpsimd(pid_t child, struct test_config *config)
|
||||
vl = vl_expected(config);
|
||||
vq = __sve_vq_from_vl(vl);
|
||||
|
||||
if (!vl)
|
||||
return;
|
||||
|
||||
iov.iov_len = SVE_PT_SIZE(vq, SVE_PT_REGS_FPSIMD);
|
||||
iov.iov_base = malloc(iov.iov_len);
|
||||
if (!iov.iov_base) {
|
||||
|
||||
@@ -394,6 +394,58 @@ out:
|
||||
free(svebuf);
|
||||
}
|
||||
|
||||
/* Write the FPSIMD registers via the SVE regset when SVE is not supported */
|
||||
static void ptrace_sve_fpsimd_no_sve(pid_t child)
|
||||
{
|
||||
void *svebuf;
|
||||
struct user_sve_header *sve;
|
||||
struct user_fpsimd_state *fpsimd, new_fpsimd;
|
||||
unsigned int i, j;
|
||||
unsigned char *p;
|
||||
int ret;
|
||||
|
||||
svebuf = malloc(SVE_PT_SIZE(0, SVE_PT_REGS_FPSIMD));
|
||||
if (!svebuf) {
|
||||
ksft_test_result_fail("Failed to allocate FPSIMD buffer\n");
|
||||
return;
|
||||
}
|
||||
|
||||
/* On a system without SVE the VL should be set to 0 */
|
||||
memset(svebuf, 0, SVE_PT_SIZE(0, SVE_PT_REGS_FPSIMD));
|
||||
sve = svebuf;
|
||||
sve->flags = SVE_PT_REGS_FPSIMD;
|
||||
sve->size = SVE_PT_SIZE(0, SVE_PT_REGS_FPSIMD);
|
||||
sve->vl = 0;
|
||||
|
||||
/* Try to set a known FPSIMD state via PT_REGS_SVE */
|
||||
fpsimd = (struct user_fpsimd_state *)((char *)sve +
|
||||
SVE_PT_FPSIMD_OFFSET);
|
||||
for (i = 0; i < 32; ++i) {
|
||||
p = (unsigned char *)&fpsimd->vregs[i];
|
||||
|
||||
for (j = 0; j < sizeof(fpsimd->vregs[i]); ++j)
|
||||
p[j] = j;
|
||||
}
|
||||
|
||||
ret = set_sve(child, &vec_types[0], sve);
|
||||
ksft_test_result(ret == 0, "FPSIMD write via SVE\n");
|
||||
if (ret) {
|
||||
ksft_test_result_skip("Verify FPSIMD write via SVE\n");
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* Verify via the FPSIMD regset */
|
||||
if (get_fpsimd(child, &new_fpsimd)) {
|
||||
ksft_test_result_skip("Verify FPSIMD write via SVE\n");
|
||||
goto out;
|
||||
}
|
||||
ksft_test_result(memcmp(fpsimd, &new_fpsimd, sizeof(*fpsimd)) == 0,
|
||||
"Verify FPSIMD write via SVE\n");
|
||||
|
||||
out:
|
||||
free(svebuf);
|
||||
}
|
||||
|
||||
/* Validate attempting to set SVE data and read SVE data */
|
||||
static void ptrace_set_sve_get_sve_data(pid_t child,
|
||||
const struct vec_type *type,
|
||||
@@ -826,6 +878,15 @@ static int do_parent(pid_t child)
|
||||
}
|
||||
}
|
||||
|
||||
/* We support SVE writes of FPSMID format on SME only systems */
|
||||
if (!(getauxval(AT_HWCAP) & HWCAP_SVE) &&
|
||||
(getauxval(AT_HWCAP2) & HWCAP2_SME)) {
|
||||
ptrace_sve_fpsimd_no_sve(child);
|
||||
} else {
|
||||
ksft_test_result_skip("FPSIMD write via SVE\n");
|
||||
ksft_test_result_skip("Verify FPSIMD write via SVE\n");
|
||||
}
|
||||
|
||||
ret = EXIT_SUCCESS;
|
||||
|
||||
error:
|
||||
|
||||
@@ -276,7 +276,7 @@ function barf
|
||||
bl putdec
|
||||
puts ", iteration="
|
||||
mov x0, x22
|
||||
bl putdec
|
||||
bl putdecn
|
||||
puts "\tExpected ["
|
||||
mov x0, x10
|
||||
mov x1, x12
|
||||
|
||||
Reference in New Issue
Block a user