From: <gregkh@linuxfoundation.org>
To: alexandru.elisei@arm.com,anshuman.khandual@arm.com,broonie@kernel.org,catalin.marinas@arm.com,ebiederm@xmission.com,gregkh@linuxfoundation.org,haibinzhang@tencent.com,hewenliang4@huawei.com,james.morse@arm.com,joey.gouly@arm.com,linux-arm-kernel@lists.infradead.org,mark.rutland@arm.com,maz@kernel.org,pcc@google.com,peterz@infradead.org,ruanjinjie@huawei.com,sashal@kernel.org,scott@os.amperecomputing.com,stable@kernel.org,will@kernel.org
Cc: <stable-commits@vger.kernel.org>
Subject: Patch "arm64: armv8_deprecated: fold ops into insn_emulation" has been added to the 5.15-stable tree
Date: Mon, 16 Oct 2023 10:03:55 +0200 [thread overview]
Message-ID: <2023101655-devious-rework-8ac8@gregkh> (raw)
In-Reply-To: <20231011100655.979626-12-ruanjinjie@huawei.com>
This is a note to let you know that I've just added the patch titled
arm64: armv8_deprecated: fold ops into insn_emulation
to the 5.15-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
arm64-armv8_deprecated-fold-ops-into-insn_emulation.patch
and it can be found in the queue-5.15 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@vger.kernel.org> know about it.
From ruanjinjie@huawei.com Wed Oct 11 12:07:48 2023
From: Jinjie Ruan <ruanjinjie@huawei.com>
Date: Wed, 11 Oct 2023 10:06:51 +0000
Subject: arm64: armv8_deprecated: fold ops into insn_emulation
To: <catalin.marinas@arm.com>, <will@kernel.org>, <mark.rutland@arm.com>, <broonie@kernel.org>, <anshuman.khandual@arm.com>, <alexandru.elisei@arm.com>, <sashal@kernel.org>, <maz@kernel.org>, <gregkh@linuxfoundation.org>, <james.morse@arm.com>, <pcc@google.com>, <scott@os.amperecomputing.com>, <ebiederm@xmission.com>, <haibinzhang@tencent.com>, <hewenliang4@huawei.com>, <linux-arm-kernel@lists.infradead.org>, <linux-kernel@vger.kernel.org>, <stable@kernel.org>
Cc: <ruanjinjie@huawei.com>
Message-ID: <20231011100655.979626-12-ruanjinjie@huawei.com>
From: Mark Rutland <mark.rutland@arm.com>
commit b4453cc8a7ebbd45436a8cd3ffeaa069ceac146f upstream.
The code for emulating deprecated instructions has two related
structures: struct insn_emulation_ops and struct insn_emulation, where
each struct insn_emulation_ops is associated 1-1 with a struct
insn_emulation.
It would be simpler to combine the two into a single structure, removing
the need for (unconditional) dynamic allocation at boot time, and
simplifying some runtime pointer chasing.
This patch merges the two structures together.
There should be no functional change as a result of this patch.
Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: James Morse <james.morse@arm.com>
Cc: Joey Gouly <joey.gouly@arm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Will Deacon <will@kernel.org>
Link: https://lore.kernel.org/r/20221019144123.612388-7-mark.rutland@arm.com
Signed-off-by: Will Deacon <will@kernel.org>
Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
arch/arm64/kernel/armv8_deprecated.c | 76 +++++++++++++++--------------------
1 file changed, 33 insertions(+), 43 deletions(-)
--- a/arch/arm64/kernel/armv8_deprecated.c
+++ b/arch/arm64/kernel/armv8_deprecated.c
@@ -41,16 +41,12 @@ enum legacy_insn_status {
INSN_OBSOLETE,
};
-struct insn_emulation_ops {
- const char *name;
- enum legacy_insn_status status;
- struct undef_hook *hooks;
- int (*set_hw_mode)(bool enable);
-};
-
struct insn_emulation {
- struct list_head node;
- struct insn_emulation_ops *ops;
+ const char *name;
+ struct list_head node;
+ enum legacy_insn_status status;
+ struct undef_hook *hooks;
+ int (*set_hw_mode)(bool enable);
int current_mode;
int min;
int max;
@@ -61,48 +57,48 @@ static int nr_insn_emulated __initdata;
static DEFINE_RAW_SPINLOCK(insn_emulation_lock);
static DEFINE_MUTEX(insn_emulation_mutex);
-static void register_emulation_hooks(struct insn_emulation_ops *ops)
+static void register_emulation_hooks(struct insn_emulation *insn)
{
struct undef_hook *hook;
- BUG_ON(!ops->hooks);
+ BUG_ON(!insn->hooks);
- for (hook = ops->hooks; hook->instr_mask; hook++)
+ for (hook = insn->hooks; hook->instr_mask; hook++)
register_undef_hook(hook);
- pr_notice("Registered %s emulation handler\n", ops->name);
+ pr_notice("Registered %s emulation handler\n", insn->name);
}
-static void remove_emulation_hooks(struct insn_emulation_ops *ops)
+static void remove_emulation_hooks(struct insn_emulation *insn)
{
struct undef_hook *hook;
- BUG_ON(!ops->hooks);
+ BUG_ON(!insn->hooks);
- for (hook = ops->hooks; hook->instr_mask; hook++)
+ for (hook = insn->hooks; hook->instr_mask; hook++)
unregister_undef_hook(hook);
- pr_notice("Removed %s emulation handler\n", ops->name);
+ pr_notice("Removed %s emulation handler\n", insn->name);
}
static void enable_insn_hw_mode(void *data)
{
struct insn_emulation *insn = (struct insn_emulation *)data;
- if (insn->ops->set_hw_mode)
- insn->ops->set_hw_mode(true);
+ if (insn->set_hw_mode)
+ insn->set_hw_mode(true);
}
static void disable_insn_hw_mode(void *data)
{
struct insn_emulation *insn = (struct insn_emulation *)data;
- if (insn->ops->set_hw_mode)
- insn->ops->set_hw_mode(false);
+ if (insn->set_hw_mode)
+ insn->set_hw_mode(false);
}
/* Run set_hw_mode(mode) on all active CPUs */
static int run_all_cpu_set_hw_mode(struct insn_emulation *insn, bool enable)
{
- if (!insn->ops->set_hw_mode)
+ if (!insn->set_hw_mode)
return -EINVAL;
if (enable)
on_each_cpu(enable_insn_hw_mode, (void *)insn, true);
@@ -126,9 +122,9 @@ static int run_all_insn_set_hw_mode(unsi
raw_spin_lock_irqsave(&insn_emulation_lock, flags);
list_for_each_entry(insn, &insn_emulation, node) {
bool enable = (insn->current_mode == INSN_HW);
- if (insn->ops->set_hw_mode && insn->ops->set_hw_mode(enable)) {
+ if (insn->set_hw_mode && insn->set_hw_mode(enable)) {
pr_warn("CPU[%u] cannot support the emulation of %s",
- cpu, insn->ops->name);
+ cpu, insn->name);
rc = -EINVAL;
}
}
@@ -145,11 +141,11 @@ static int update_insn_emulation_mode(st
case INSN_UNDEF: /* Nothing to be done */
break;
case INSN_EMULATE:
- remove_emulation_hooks(insn->ops);
+ remove_emulation_hooks(insn);
break;
case INSN_HW:
if (!run_all_cpu_set_hw_mode(insn, false))
- pr_notice("Disabled %s support\n", insn->ops->name);
+ pr_notice("Disabled %s support\n", insn->name);
break;
}
@@ -157,31 +153,25 @@ static int update_insn_emulation_mode(st
case INSN_UNDEF:
break;
case INSN_EMULATE:
- register_emulation_hooks(insn->ops);
+ register_emulation_hooks(insn);
break;
case INSN_HW:
ret = run_all_cpu_set_hw_mode(insn, true);
if (!ret)
- pr_notice("Enabled %s support\n", insn->ops->name);
+ pr_notice("Enabled %s support\n", insn->name);
break;
}
return ret;
}
-static void __init register_insn_emulation(struct insn_emulation_ops *ops)
+static void __init register_insn_emulation(struct insn_emulation *insn)
{
unsigned long flags;
- struct insn_emulation *insn;
-
- insn = kzalloc(sizeof(*insn), GFP_KERNEL);
- if (!insn)
- return;
- insn->ops = ops;
insn->min = INSN_UNDEF;
- switch (ops->status) {
+ switch (insn->status) {
case INSN_DEPRECATED:
insn->current_mode = INSN_EMULATE;
/* Disable the HW mode if it was turned on at early boot time */
@@ -247,7 +237,7 @@ static void __init register_insn_emulati
sysctl->mode = 0644;
sysctl->maxlen = sizeof(int);
- sysctl->procname = insn->ops->name;
+ sysctl->procname = insn->name;
sysctl->data = &insn->current_mode;
sysctl->extra1 = &insn->min;
sysctl->extra2 = &insn->max;
@@ -451,7 +441,7 @@ static struct undef_hook swp_hooks[] = {
{ }
};
-static struct insn_emulation_ops swp_ops = {
+static struct insn_emulation insn_swp = {
.name = "swp",
.status = INSN_OBSOLETE,
.hooks = swp_hooks,
@@ -538,7 +528,7 @@ static struct undef_hook cp15_barrier_ho
{ }
};
-static struct insn_emulation_ops cp15_barrier_ops = {
+static struct insn_emulation insn_cp15_barrier = {
.name = "cp15_barrier",
.status = INSN_DEPRECATED,
.hooks = cp15_barrier_hooks,
@@ -611,7 +601,7 @@ static struct undef_hook setend_hooks[]
{}
};
-static struct insn_emulation_ops setend_ops = {
+static struct insn_emulation insn_setend = {
.name = "setend",
.status = INSN_DEPRECATED,
.hooks = setend_hooks,
@@ -625,14 +615,14 @@ static struct insn_emulation_ops setend_
static int __init armv8_deprecated_init(void)
{
if (IS_ENABLED(CONFIG_SWP_EMULATION))
- register_insn_emulation(&swp_ops);
+ register_insn_emulation(&insn_swp);
if (IS_ENABLED(CONFIG_CP15_BARRIER_EMULATION))
- register_insn_emulation(&cp15_barrier_ops);
+ register_insn_emulation(&insn_cp15_barrier);
if (IS_ENABLED(CONFIG_SETEND_EMULATION)) {
if (system_supports_mixed_endian_el0())
- register_insn_emulation(&setend_ops);
+ register_insn_emulation(&insn_setend);
else
pr_info("setend instruction emulation is not supported on this system\n");
}
Patches currently in stable-queue which might be from ruanjinjie@huawei.com are
queue-5.15/arm64-factor-insn-read-out-of-call_undef_hook.patch
queue-5.15/arm64-rework-el0-mrs-emulation.patch
queue-5.15/arm64-die-pass-err-as-long.patch
queue-5.15/arm64-armv8_deprecated-rework-deprected-instruction-handling.patch
queue-5.15/arm64-armv8_deprecated-fix-unused-function-error.patch
queue-5.15/arm64-armv8_deprecated-move-aarch32-helper-earlier.patch
queue-5.15/arm64-consistently-pass-esr_elx-to-die.patch
queue-5.15/arm64-factor-out-el1-ssbs-emulation-hook.patch
queue-5.15/arm64-report-el1-undefs-better.patch
queue-5.15/arm64-armv8_deprecated-fold-ops-into-insn_emulation.patch
queue-5.15/arm64-rework-bti-exception-handling.patch
queue-5.15/arm64-rework-fpac-exception-handling.patch
queue-5.15/arm64-split-el0-el1-undef-handlers.patch
queue-5.15/arm64-allow-kprobes-on-el0-handlers.patch
queue-5.15/arm64-armv8_deprecated-move-emulation-functions.patch
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2023-10-16 8:05 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-11 10:06 [PATCH v5.15 00/15] arm64: Fix a concurrency issue in emulation_proc_handler() Jinjie Ruan
2023-10-11 10:06 ` [PATCH v5.15 01/15] arm64: report EL1 UNDEFs better Jinjie Ruan
2023-10-16 8:03 ` Patch "arm64: report EL1 UNDEFs better" has been added to the 5.15-stable tree gregkh
2023-10-11 10:06 ` [PATCH v5.15 02/15] arm64: die(): pass 'err' as long Jinjie Ruan
2023-10-16 8:03 ` Patch "arm64: die(): pass 'err' as long" has been added to the 5.15-stable tree gregkh
2023-10-11 10:06 ` [PATCH v5.15 03/15] arm64: consistently pass ESR_ELx to die() Jinjie Ruan
2023-10-16 8:03 ` Patch "arm64: consistently pass ESR_ELx to die()" has been added to the 5.15-stable tree gregkh
2023-10-11 10:06 ` [PATCH v5.15 04/15] arm64: rework FPAC exception handling Jinjie Ruan
2023-10-16 8:03 ` Patch "arm64: rework FPAC exception handling" has been added to the 5.15-stable tree gregkh
2023-10-11 10:06 ` [PATCH v5.15 05/15] arm64: rework BTI exception handling Jinjie Ruan
2023-10-16 8:03 ` Patch "arm64: rework BTI exception handling" has been added to the 5.15-stable tree gregkh
2023-10-11 10:06 ` [PATCH v5.15 06/15] arm64: allow kprobes on EL0 handlers Jinjie Ruan
2023-10-16 8:03 ` Patch "arm64: allow kprobes on EL0 handlers" has been added to the 5.15-stable tree gregkh
2023-10-11 10:06 ` [PATCH v5.15 07/15] arm64: split EL0/EL1 UNDEF handlers Jinjie Ruan
2023-10-16 8:03 ` Patch "arm64: split EL0/EL1 UNDEF handlers" has been added to the 5.15-stable tree gregkh
2023-10-11 10:06 ` [PATCH v5.15 08/15] arm64: factor out EL1 SSBS emulation hook Jinjie Ruan
2023-10-16 8:03 ` Patch "arm64: factor out EL1 SSBS emulation hook" has been added to the 5.15-stable tree gregkh
2023-10-11 10:06 ` [PATCH v5.15 09/15] arm64: factor insn read out of call_undef_hook() Jinjie Ruan
2023-10-16 8:03 ` Patch "arm64: factor insn read out of call_undef_hook()" has been added to the 5.15-stable tree gregkh
2023-10-11 10:06 ` [PATCH v5.15 10/15] arm64: rework EL0 MRS emulation Jinjie Ruan
2023-10-16 8:03 ` Patch "arm64: rework EL0 MRS emulation" has been added to the 5.15-stable tree gregkh
2023-10-11 10:06 ` [PATCH v5.15 11/15] arm64: armv8_deprecated: fold ops into insn_emulation Jinjie Ruan
2023-10-16 8:03 ` gregkh [this message]
2023-10-11 10:06 ` [PATCH v5.15 12/15] arm64: armv8_deprecated move emulation functions Jinjie Ruan
2023-10-16 8:03 ` Patch "arm64: armv8_deprecated move emulation functions" has been added to the 5.15-stable tree gregkh
2023-10-11 10:06 ` [PATCH v5.15 13/15] arm64: armv8_deprecated: move aarch32 helper earlier Jinjie Ruan
2023-10-16 8:03 ` Patch "arm64: armv8_deprecated: move aarch32 helper earlier" has been added to the 5.15-stable tree gregkh
2023-10-11 10:06 ` [PATCH v5.15 14/15] arm64: armv8_deprecated: rework deprected instruction handling Jinjie Ruan
2023-10-16 8:03 ` Patch "arm64: armv8_deprecated: rework deprected instruction handling" has been added to the 5.15-stable tree gregkh
2023-10-11 10:06 ` [PATCH v5.15 15/15] arm64: armv8_deprecated: fix unused-function error Jinjie Ruan
2023-10-16 8:03 ` Patch "arm64: armv8_deprecated: fix unused-function error" has been added to the 5.15-stable tree gregkh
2023-10-16 8:04 ` [PATCH v5.15 00/15] arm64: Fix a concurrency issue in emulation_proc_handler() Greg KH
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=2023101655-devious-rework-8ac8@gregkh \
--to=gregkh@linuxfoundation.org \
--cc=alexandru.elisei@arm.com \
--cc=anshuman.khandual@arm.com \
--cc=broonie@kernel.org \
--cc=catalin.marinas@arm.com \
--cc=ebiederm@xmission.com \
--cc=haibinzhang@tencent.com \
--cc=hewenliang4@huawei.com \
--cc=james.morse@arm.com \
--cc=joey.gouly@arm.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=mark.rutland@arm.com \
--cc=maz@kernel.org \
--cc=pcc@google.com \
--cc=peterz@infradead.org \
--cc=ruanjinjie@huawei.com \
--cc=sashal@kernel.org \
--cc=scott@os.amperecomputing.com \
--cc=stable-commits@vger.kernel.org \
--cc=stable@kernel.org \
--cc=will@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox