From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: speck@linutronix.de
Subject: [MODERATED] Re: [PATCH v5 16/27] MDSv5 10
Date: Mon, 21 Jan 2019 23:54:17 -0500 [thread overview]
Message-ID: <20190122045417.GL12859@char.us.oracle.com> (raw)
In-Reply-To: <a220daf6f508ae561a4b55574b6d32b9cee1c1b6.1547858934.git.ak@linux.intel.com>
On Fri, Jan 18, 2019 at 04:50:31PM -0800, speck for Andi Kleen wrote:
> From: Andi Kleen <ak@linux.intel.com>
> Subject: mds: Mark interrupts clear cpu, unless opted-out
>
> Interrupts might touch user data from other processes
> in any context.
>
> By default we clear the CPU on the next kernel exit.
>
> Add a new IRQ_F_NO_USER interrupt flag. When the flag
> is not set on interrupt execution we clear the cpu state on
s/we clear the cpu state/we flush the CPU's MDS state's/ ?
'cpu state' implies (At least to me) - everything - like even cache.
But that is what not what we do - we do our lazy CPU flushing.
> next kernel exit.
>
> This allows interrupts to opt-out from the extra clearing
> overhead, but is safe by default.
s/but is safe by default/if they are sanitized and carry no user data./ ?
>
> Over time as more interrupt code is audited it can set the opt-out.
s/it can set the opt-out/we can opt-out various code/ ?
Either way:
>
> Signed-off-by: Andi Kleen <ak@linux.intel.com>
Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Thank you!
> ---
> include/linux/interrupt.h | 2 ++
> kernel/irq/handle.c | 8 ++++++++
> kernel/irq/manage.c | 1 +
> 3 files changed, 11 insertions(+)
>
> diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
> index c672f34235e7..291b7fee3afe 100644
> --- a/include/linux/interrupt.h
> +++ b/include/linux/interrupt.h
> @@ -61,6 +61,7 @@
> * interrupt handler after suspending interrupts. For system
> * wakeup devices users need to implement wakeup detection in
> * their interrupt handlers.
> + * IRQF_NO_USER - Interrupt does not touch user data
> */
> #define IRQF_SHARED 0x00000080
> #define IRQF_PROBE_SHARED 0x00000100
> @@ -74,6 +75,7 @@
> #define IRQF_NO_THREAD 0x00010000
> #define IRQF_EARLY_RESUME 0x00020000
> #define IRQF_COND_SUSPEND 0x00040000
> +#define IRQF_NO_USER 0x00080000
>
> #define IRQF_TIMER (__IRQF_TIMER | IRQF_NO_SUSPEND | IRQF_NO_THREAD)
>
> diff --git a/kernel/irq/handle.c b/kernel/irq/handle.c
> index 38554bc35375..e5910938ce2b 100644
> --- a/kernel/irq/handle.c
> +++ b/kernel/irq/handle.c
> @@ -13,6 +13,7 @@
> #include <linux/sched.h>
> #include <linux/interrupt.h>
> #include <linux/kernel_stat.h>
> +#include <linux/clearcpu.h>
>
> #include <trace/events/irq.h>
>
> @@ -149,6 +150,13 @@ irqreturn_t __handle_irq_event_percpu(struct irq_desc *desc, unsigned int *flags
> res = action->handler(irq, action->dev_id);
> trace_irq_handler_exit(irq, action, res);
>
> + /*
> + * We aren't sure if the interrupt handler did or did not
> + * touch user data. Schedule a cpu clear just in case.
> + */
> + if (!(action->flags & IRQF_NO_USER))
> + lazy_clear_cpu();
> +
> if (WARN_ONCE(!irqs_disabled(),"irq %u handler %pF enabled interrupts\n",
> irq, action->handler))
> local_irq_disable();
> diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
> index a4888ce4667a..3f0c99240638 100644
> --- a/kernel/irq/manage.c
> +++ b/kernel/irq/manage.c
> @@ -1793,6 +1793,7 @@ EXPORT_SYMBOL(free_irq);
> *
> * IRQF_SHARED Interrupt is shared
> * IRQF_TRIGGER_* Specify active edge(s) or level
> + * IRQF_NOUSER Does not touch user data.
> *
> */
> int request_threaded_irq(unsigned int irq, irq_handler_t handler,
> --
> 2.17.2
next prev parent reply other threads:[~2019-01-22 4:54 UTC|newest]
Thread overview: 105+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-19 0:50 [MODERATED] [PATCH v5 00/27] MDSv5 19 Andi Kleen
2019-01-19 0:50 ` [MODERATED] [PATCH v5 01/27] MDSv5 26 Andi Kleen
2019-01-22 4:17 ` [MODERATED] " Konrad Rzeszutek Wilk
2019-01-22 12:46 ` Thomas Gleixner
2019-01-19 0:50 ` [MODERATED] [PATCH v5 02/27] MDSv5 14 Andi Kleen
2019-01-22 4:20 ` [MODERATED] " Konrad Rzeszutek Wilk
2019-01-22 12:51 ` Thomas Gleixner
2019-01-19 0:50 ` [MODERATED] [PATCH v5 03/27] MDSv5 16 Andi Kleen
2019-01-22 4:23 ` [MODERATED] " Konrad Rzeszutek Wilk
2019-01-22 12:55 ` Thomas Gleixner
2019-01-27 21:58 ` Thomas Gleixner
2019-01-28 3:30 ` [MODERATED] " Andi Kleen
2019-01-19 0:50 ` [MODERATED] [PATCH v5 04/27] MDSv5 15 Andi Kleen
2019-01-22 4:33 ` [MODERATED] " Konrad Rzeszutek Wilk
2019-01-22 12:59 ` Thomas Gleixner
2019-01-19 0:50 ` [MODERATED] [PATCH v5 05/27] MDSv5 21 Andi Kleen
2019-01-22 4:35 ` [MODERATED] " Konrad Rzeszutek Wilk
2019-01-22 13:01 ` Thomas Gleixner
2019-02-21 12:06 ` Thomas Gleixner
2019-01-19 0:50 ` [MODERATED] [PATCH v5 06/27] MDSv5 18 Andi Kleen
2019-01-21 22:41 ` [MODERATED] " Josh Poimboeuf
2019-01-22 1:16 ` Andi Kleen
2019-01-19 0:50 ` [MODERATED] [PATCH v5 07/27] MDSv5 0 Andi Kleen
2019-01-22 4:39 ` [MODERATED] " Konrad Rzeszutek Wilk
2019-01-27 22:09 ` Thomas Gleixner
2019-01-28 3:33 ` [MODERATED] " Andi Kleen
2019-01-28 8:29 ` Thomas Gleixner
2019-02-13 22:26 ` [MODERATED] " Tyler Hicks
2019-01-19 0:50 ` [MODERATED] [PATCH v5 08/27] MDSv5 13 Andi Kleen
2019-01-22 4:40 ` [MODERATED] " Konrad Rzeszutek Wilk
2019-01-19 0:50 ` [MODERATED] [PATCH v5 09/27] MDSv5 23 Andi Kleen
2019-01-22 4:56 ` [MODERATED] " Konrad Rzeszutek Wilk
2019-01-22 7:26 ` Greg KH
2019-01-22 13:07 ` Thomas Gleixner
2019-01-19 0:50 ` [MODERATED] [PATCH v5 10/27] MDSv5 7 Andi Kleen
2019-01-19 0:50 ` [MODERATED] [PATCH v5 11/27] MDSv5 2 Andi Kleen
2019-01-22 13:11 ` Thomas Gleixner
2019-01-19 0:50 ` [MODERATED] [PATCH v5 12/27] MDSv5 6 Andi Kleen
2019-01-22 14:01 ` Thomas Gleixner
2019-01-22 15:42 ` Thomas Gleixner
2019-01-22 18:01 ` [MODERATED] " Andi Kleen
2019-01-19 0:50 ` [MODERATED] [PATCH v5 13/27] MDSv5 17 Andi Kleen
2019-01-19 0:50 ` [MODERATED] [PATCH v5 14/27] MDSv5 3 Andi Kleen
2019-01-22 4:48 ` [MODERATED] " Konrad Rzeszutek Wilk
2019-01-22 15:58 ` Thomas Gleixner
2019-01-22 17:57 ` Thomas Gleixner
2019-01-23 1:35 ` [MODERATED] " Andi Kleen
2019-01-23 9:27 ` Thomas Gleixner
2019-01-23 16:02 ` [MODERATED] " Andi Kleen
2019-01-23 22:40 ` Josh Poimboeuf
2019-01-23 22:57 ` Josh Poimboeuf
2019-01-24 0:25 ` Josh Poimboeuf
2019-01-24 2:26 ` Andi Kleen
2019-01-24 12:04 ` Thomas Gleixner
2019-01-28 3:42 ` [MODERATED] " Andi Kleen
2019-01-28 8:33 ` Thomas Gleixner
2019-02-16 2:00 ` [MODERATED] " Andi Kleen
2019-02-16 10:32 ` Thomas Gleixner
2019-02-16 16:58 ` [MODERATED] " Andi Kleen
2019-02-16 17:12 ` Andi Kleen
2019-01-19 0:50 ` [MODERATED] [PATCH v5 15/27] MDSv5 1 Andi Kleen
2019-01-22 4:48 ` [MODERATED] " Konrad Rzeszutek Wilk
2019-01-19 0:50 ` [MODERATED] [PATCH v5 16/27] MDSv5 10 Andi Kleen
2019-01-22 4:54 ` Konrad Rzeszutek Wilk [this message]
2019-01-22 7:33 ` [MODERATED] " Greg KH
2019-01-19 0:50 ` [MODERATED] [PATCH v5 17/27] MDSv5 9 Andi Kleen
2019-01-19 0:50 ` [MODERATED] [PATCH v5 18/27] MDSv5 8 Andi Kleen
2019-01-22 5:07 ` [MODERATED] " Konrad Rzeszutek Wilk
2019-01-19 0:50 ` [MODERATED] [PATCH v5 19/27] MDSv5 12 Andi Kleen
2019-01-22 5:09 ` [MODERATED] " Konrad Rzeszutek Wilk
2019-01-19 0:50 ` [MODERATED] [PATCH v5 20/27] MDSv5 27 Andi Kleen
2019-01-19 0:50 ` [MODERATED] [PATCH v5 21/27] MDSv5 20 Andi Kleen
2019-01-22 5:11 ` [MODERATED] " Konrad Rzeszutek Wilk
2019-01-19 0:50 ` [MODERATED] [PATCH v5 22/27] MDSv5 24 Andi Kleen
2019-01-21 21:24 ` [MODERATED] " Linus Torvalds
2019-01-22 1:22 ` Andi Kleen
2019-01-22 16:09 ` Thomas Gleixner
2019-01-22 17:56 ` [MODERATED] " Andi Kleen
2019-01-22 18:56 ` Thomas Gleixner
2019-01-23 1:39 ` [MODERATED] " Andi Kleen
2019-01-23 6:39 ` Greg KH
2019-01-24 9:55 ` Thomas Gleixner
2019-01-19 0:50 ` [MODERATED] [PATCH v5 23/27] MDSv5 22 Andi Kleen
2019-01-19 0:50 ` [MODERATED] [PATCH v5 24/27] MDSv5 5 Andi Kleen
2019-01-21 21:20 ` [MODERATED] " Linus Torvalds
2019-01-19 0:50 ` [MODERATED] [PATCH v5 25/27] MDSv5 4 Andi Kleen
2019-01-22 5:15 ` [MODERATED] " Konrad Rzeszutek Wilk
2019-01-19 0:50 ` [MODERATED] [PATCH v5 26/27] MDSv5 11 Andi Kleen
2019-01-19 0:50 ` [MODERATED] [PATCH v5 27/27] MDSv5 25 Andi Kleen
2019-01-21 21:18 ` [MODERATED] Re: [PATCH v5 00/27] MDSv5 19 Linus Torvalds
2019-01-22 1:14 ` Andi Kleen
2019-01-22 7:38 ` Greg KH
2019-01-28 11:34 ` Thomas Gleixner
2019-02-13 22:33 ` [MODERATED] " Tyler Hicks
2019-02-14 13:09 ` Jiri Kosina
2019-02-14 13:51 ` Greg KH
2019-02-14 16:53 ` Andi Kleen
2019-02-14 18:00 ` Greg KH
2019-02-14 18:05 ` Andrew Cooper
2019-02-14 18:33 ` Andi Kleen
2019-02-14 18:52 ` Greg KH
2019-02-14 19:50 ` Andi Kleen
2019-02-15 7:06 ` Greg KH
2019-02-15 13:06 ` Andi Kleen
2019-02-19 12:12 ` 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=20190122045417.GL12859@char.us.oracle.com \
--to=konrad.wilk@oracle.com \
--cc=speck@linutronix.de \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.