mirror of
https://github.com/torvalds/linux.git
synced 2026-05-29 17:43:52 +02:00
arm64 fixes for -rc5
- Fix DWARF parsing for SCS/PAC patching to work with very large modules
(such as the amdgpu driver).
- Fixes to the mpam resctrl driver.
- Fix broken handling of 52-bit physical addresses when sharing memory
from within a realm.
-----BEGIN PGP SIGNATURE-----
iQFEBAABCgAuFiEEPxTL6PPUbjXGY88ct6xw3ITBYzQFAmm9KmsQHHdpbGxAa2Vy
bmVsLm9yZwAKCRC3rHDchMFjNMBvB/4xtXt77u6Bx6vG3b9LZVU7XxIZN+svvIWs
S1unNTqcLPjNhkqC7kJeTgOjbUOJ6jtCm3NQRg66fUDXOknwHp8d1yjoNI+eS6Ki
hhRWtWZm+vGNb0YAJTNAATuNSmvn0qx3KMlHEQKnKUsAdzuVTTxwln0GjASLcP7H
gMl0h46/CtvTRoSlBzTd5ObR8bcQeD1tRBHlXaCZI4i0rF9d3Aur3n1Vz7DfOUP9
YzHjNZIdWd/6+hIqVAzrhiJE3kxLRv46OXh71Q2YKWe48/USCUskueGLK3c27Gs1
o6xsc9ZlItVRTO6J1rFCN2No2Pigmdqkqu1moeZCb37R79ilVb/i
=Wv4u
-----END PGP SIGNATURE-----
Merge tag 'arm64-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux
Pull arm64 fixes from Will Deacon:
"There's a small crop of fixes for the MPAM resctrl driver, a fix for
SCS/PAC patching with the AMDGPU driver and a page-table fix for
realms running with 52-bit physical addresses:
- Fix DWARF parsing for SCS/PAC patching to work with very large
modules (such as the amdgpu driver)
- Fixes to the mpam resctrl driver
- Fix broken handling of 52-bit physical addresses when sharing
memory from within a realm"
* tag 'arm64-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux:
arm64: realm: Fix PTE_NS_SHARED for 52bit PA support
arm_mpam: Force __iomem casts
arm_mpam: Disable preemption when making accesses to fake MSC in kunit test
arm_mpam: Fix null pointer dereference when restoring bandwidth counters
arm64/scs: Fix handling of advance_loc4
This commit is contained in:
commit
165160265e
|
|
@ -192,6 +192,14 @@ static int scs_handle_fde_frame(const struct eh_frame *frame,
|
|||
size -= 2;
|
||||
break;
|
||||
|
||||
case DW_CFA_advance_loc4:
|
||||
loc += *opcode++ * code_alignment_factor;
|
||||
loc += (*opcode++ << 8) * code_alignment_factor;
|
||||
loc += (*opcode++ << 16) * code_alignment_factor;
|
||||
loc += (*opcode++ << 24) * code_alignment_factor;
|
||||
size -= 4;
|
||||
break;
|
||||
|
||||
case DW_CFA_def_cfa:
|
||||
case DW_CFA_offset_extended:
|
||||
size = skip_xleb128(&opcode, size);
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@
|
|||
|
||||
#include <asm/io.h>
|
||||
#include <asm/mem_encrypt.h>
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/rsi.h>
|
||||
|
||||
static struct realm_config config;
|
||||
|
|
@ -146,7 +147,7 @@ void __init arm64_rsi_init(void)
|
|||
return;
|
||||
if (WARN_ON(rsi_get_realm_config(&config)))
|
||||
return;
|
||||
prot_ns_shared = BIT(config.ipa_bits - 1);
|
||||
prot_ns_shared = __phys_to_pte_val(BIT(config.ipa_bits - 1));
|
||||
|
||||
if (arm64_ioremap_prot_hook_register(realm_ioremap_hook))
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -1428,6 +1428,7 @@ static void mpam_reprogram_ris_partid(struct mpam_msc_ris *ris, u16 partid,
|
|||
static int mpam_restore_mbwu_state(void *_ris)
|
||||
{
|
||||
int i;
|
||||
u64 val;
|
||||
struct mon_read mwbu_arg;
|
||||
struct mpam_msc_ris *ris = _ris;
|
||||
struct mpam_class *class = ris->vmsc->comp->class;
|
||||
|
|
@ -1437,6 +1438,7 @@ static int mpam_restore_mbwu_state(void *_ris)
|
|||
mwbu_arg.ris = ris;
|
||||
mwbu_arg.ctx = &ris->mbwu_state[i].cfg;
|
||||
mwbu_arg.type = mpam_msmon_choose_counter(class);
|
||||
mwbu_arg.val = &val;
|
||||
|
||||
__ris_msmon_read(&mwbu_arg);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -322,9 +322,17 @@ static void test_mpam_enable_merge_features(struct kunit *test)
|
|||
mutex_unlock(&mpam_list_lock);
|
||||
}
|
||||
|
||||
static void __test_mpam_reset_msc_bitmap(struct mpam_msc *msc, u16 reg, u16 wd)
|
||||
{
|
||||
/* Avoid warnings when running with CONFIG_DEBUG_PREEMPT */
|
||||
guard(preempt)();
|
||||
|
||||
mpam_reset_msc_bitmap(msc, reg, wd);
|
||||
}
|
||||
|
||||
static void test_mpam_reset_msc_bitmap(struct kunit *test)
|
||||
{
|
||||
char __iomem *buf = kunit_kzalloc(test, SZ_16K, GFP_KERNEL);
|
||||
char __iomem *buf = (__force char __iomem *)kunit_kzalloc(test, SZ_16K, GFP_KERNEL);
|
||||
struct mpam_msc fake_msc = {};
|
||||
u32 *test_result;
|
||||
|
||||
|
|
@ -339,33 +347,33 @@ static void test_mpam_reset_msc_bitmap(struct kunit *test)
|
|||
mutex_init(&fake_msc.part_sel_lock);
|
||||
mutex_lock(&fake_msc.part_sel_lock);
|
||||
|
||||
test_result = (u32 *)(buf + MPAMCFG_CPBM);
|
||||
test_result = (__force u32 *)(buf + MPAMCFG_CPBM);
|
||||
|
||||
mpam_reset_msc_bitmap(&fake_msc, MPAMCFG_CPBM, 0);
|
||||
__test_mpam_reset_msc_bitmap(&fake_msc, MPAMCFG_CPBM, 0);
|
||||
KUNIT_EXPECT_EQ(test, test_result[0], 0);
|
||||
KUNIT_EXPECT_EQ(test, test_result[1], 0);
|
||||
test_result[0] = 0;
|
||||
test_result[1] = 0;
|
||||
|
||||
mpam_reset_msc_bitmap(&fake_msc, MPAMCFG_CPBM, 1);
|
||||
__test_mpam_reset_msc_bitmap(&fake_msc, MPAMCFG_CPBM, 1);
|
||||
KUNIT_EXPECT_EQ(test, test_result[0], 1);
|
||||
KUNIT_EXPECT_EQ(test, test_result[1], 0);
|
||||
test_result[0] = 0;
|
||||
test_result[1] = 0;
|
||||
|
||||
mpam_reset_msc_bitmap(&fake_msc, MPAMCFG_CPBM, 16);
|
||||
__test_mpam_reset_msc_bitmap(&fake_msc, MPAMCFG_CPBM, 16);
|
||||
KUNIT_EXPECT_EQ(test, test_result[0], 0xffff);
|
||||
KUNIT_EXPECT_EQ(test, test_result[1], 0);
|
||||
test_result[0] = 0;
|
||||
test_result[1] = 0;
|
||||
|
||||
mpam_reset_msc_bitmap(&fake_msc, MPAMCFG_CPBM, 32);
|
||||
__test_mpam_reset_msc_bitmap(&fake_msc, MPAMCFG_CPBM, 32);
|
||||
KUNIT_EXPECT_EQ(test, test_result[0], 0xffffffff);
|
||||
KUNIT_EXPECT_EQ(test, test_result[1], 0);
|
||||
test_result[0] = 0;
|
||||
test_result[1] = 0;
|
||||
|
||||
mpam_reset_msc_bitmap(&fake_msc, MPAMCFG_CPBM, 33);
|
||||
__test_mpam_reset_msc_bitmap(&fake_msc, MPAMCFG_CPBM, 33);
|
||||
KUNIT_EXPECT_EQ(test, test_result[0], 0xffffffff);
|
||||
KUNIT_EXPECT_EQ(test, test_result[1], 1);
|
||||
test_result[0] = 0;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user