Re: [PATCH 1/4] livepatch: Introduce klp_for_each_patch macro

From: Joe Lawrence
Date: Mon Jan 21 2019 - 17:34:32 EST


On Wed, Jan 16, 2019 at 05:17:17PM +0100, Petr Mladek wrote:
> There are already macros to iterate over struct klp_func and klp_object.
>
> Add also klp_for_each_patch(). But make it internal because also
> klp_patches list is internal.
>
> Suggested-by: Josh Poimboeuf <jpoimboe@xxxxxxxxxx>
> Signed-off-by: Petr Mladek <pmladek@xxxxxxxx>
> ---
> kernel/livepatch/core.c | 8 ++++----
> kernel/livepatch/core.h | 6 ++++++
> kernel/livepatch/transition.c | 2 +-
> 3 files changed, 11 insertions(+), 5 deletions(-)
>
> diff --git a/kernel/livepatch/core.c b/kernel/livepatch/core.c
> index adca5cf07f7e..b716a6289204 100644
> --- a/kernel/livepatch/core.c
> +++ b/kernel/livepatch/core.c
> @@ -554,7 +554,7 @@ static int klp_add_nops(struct klp_patch *patch)
> struct klp_patch *old_patch;
> struct klp_object *old_obj;
>
> - list_for_each_entry(old_patch, &klp_patches, list) {
> + klp_for_each_patch(old_patch) {
> klp_for_each_object(old_patch, old_obj) {
> int err;
>
> @@ -1089,7 +1089,7 @@ void klp_discard_replaced_patches(struct klp_patch *new_patch)
> {
> struct klp_patch *old_patch, *tmp_patch;
>
> - list_for_each_entry_safe(old_patch, tmp_patch, &klp_patches, list) {
> + klp_for_each_patch_safe(old_patch, tmp_patch) {
> if (old_patch == new_patch)
> return;
>
> @@ -1133,7 +1133,7 @@ static void klp_cleanup_module_patches_limited(struct module *mod,
> struct klp_patch *patch;
> struct klp_object *obj;
>
> - list_for_each_entry(patch, &klp_patches, list) {
> + klp_for_each_patch(patch) {
> if (patch == limit)
> break;
>
> @@ -1180,7 +1180,7 @@ int klp_module_coming(struct module *mod)
> */
> mod->klp_alive = true;
>
> - list_for_each_entry(patch, &klp_patches, list) {
> + klp_for_each_patch(patch) {
> klp_for_each_object(patch, obj) {
> if (!klp_is_module(obj) || strcmp(obj->name, mod->name))
> continue;
> diff --git a/kernel/livepatch/core.h b/kernel/livepatch/core.h
> index e6200f38701f..ec43a40b853f 100644
> --- a/kernel/livepatch/core.h
> +++ b/kernel/livepatch/core.h
> @@ -7,6 +7,12 @@
> extern struct mutex klp_mutex;
> extern struct list_head klp_patches;
>
> +#define klp_for_each_patch_safe(patch, tmp_patch) \
> + list_for_each_entry_safe(patch, tmp_patch, &klp_patches, list)
> +
> +#define klp_for_each_patch(patch) \
> + list_for_each_entry(patch, &klp_patches, list)
> +
> void klp_free_patch_start(struct klp_patch *patch);
> void klp_discard_replaced_patches(struct klp_patch *new_patch);
> void klp_discard_nops(struct klp_patch *new_patch);
> diff --git a/kernel/livepatch/transition.c b/kernel/livepatch/transition.c
> index 300273819674..a3a6f32c6fd0 100644
> --- a/kernel/livepatch/transition.c
> +++ b/kernel/livepatch/transition.c
> @@ -642,6 +642,6 @@ void klp_force_transition(void)
> for_each_possible_cpu(cpu)
> klp_update_patch_state(idle_task(cpu));
>
> - list_for_each_entry(patch, &klp_patches, list)
> + klp_for_each_patch(patch)
> patch->forced = true;
> }
> --
> 2.13.7
>

Acked-by: Joe Lawrence <joe.lawrence@xxxxxxxxxx>

-- Joe