diff mbox series

[1/2] s390/hwcaps: Add HWCAP_UV

Message ID 20220701100210.5482-2-seiden@linux.ibm.com (mailing list archive)
State New
Headers show
Series s390: Autoload uvdevice module based on CPU feature | expand

Commit Message

Steffen Eiden July 1, 2022, 10:02 a.m. UTC
This patch adds a hardware capability for the Ultravisor.
This capability will be present if facility 158 is enabled.

Signed-off-by: Steffen Eiden <seiden@linux.ibm.com>
---
 arch/s390/include/asm/elf.h  | 2 ++
 arch/s390/kernel/processor.c | 5 +++++
 2 files changed, 7 insertions(+)

Comments

Christian Borntraeger July 1, 2022, 10:10 a.m. UTC | #1
Am 01.07.22 um 12:02 schrieb Steffen Eiden:
> This patch adds a hardware capability for the Ultravisor.
> This capability will be present if facility 158 is enabled.
> 
> Signed-off-by: Steffen Eiden <seiden@linux.ibm.com>
> ---
>   arch/s390/include/asm/elf.h  | 2 ++
>   arch/s390/kernel/processor.c | 5 +++++
>   2 files changed, 7 insertions(+)
> 
> diff --git a/arch/s390/include/asm/elf.h b/arch/s390/include/asm/elf.h
> index 70a30ae258b7..3a5e89ce4fd0 100644
> --- a/arch/s390/include/asm/elf.h
> +++ b/arch/s390/include/asm/elf.h
> @@ -115,6 +115,7 @@ enum {
>   	HWCAP_NR_NNPA		= 20,
>   	HWCAP_NR_PCI_MIO	= 21,
>   	HWCAP_NR_SIE		= 22,
> +	HWCAP_NR_UV		= 23,
>   	HWCAP_NR_MAX
>   };

question for Heiko, Vasily, Alexander. This certainly works.
An alternative implementation would be to separate module_cpu_feature_match
from HWCAP. (so uv would not be shown in /proc/cpuinfo and it would be
seen in the aux vector). I would imagine that we might have more drivers
in the future that depend on a facility but this facility is not really
useful for userspace to know.

See arch/s390/include/asm/cpufeature.h
  * Restrict the set of exposed CPU features to ELF hardware capabilities for
  * now.  Additional machine flags can be indicated by values larger than
  * MAX_ELF_HWCAP_FEATURES.

Any preference from your side?

>   
> @@ -142,6 +143,7 @@ enum {
>   #define HWCAP_NNPA		BIT(HWCAP_NR_NNPA)
>   #define HWCAP_PCI_MIO		BIT(HWCAP_NR_PCI_MIO)
>   #define HWCAP_SIE		BIT(HWCAP_NR_SIE)
> +#define HWCAP_UV		BIT(HWCAP_NR_UV)
>   
>   /*
>    * These are used to set parameters in the core dumps.
> diff --git a/arch/s390/kernel/processor.c b/arch/s390/kernel/processor.c
> index aa0e0e7fc773..80ccd57a2b00 100644
> --- a/arch/s390/kernel/processor.c
> +++ b/arch/s390/kernel/processor.c
> @@ -141,6 +141,7 @@ static void show_cpu_summary(struct seq_file *m, void *v)
>   		[HWCAP_NR_NNPA]		= "nnpa",
>   		[HWCAP_NR_PCI_MIO]	= "pcimio",
>   		[HWCAP_NR_SIE]		= "sie",
> +		[HWCAP_NR_UV]		= "uv",
>   	};
>   	int i, cpu;
>   
> @@ -249,6 +250,10 @@ static int __init setup_hwcaps(void)
>   	if (sclp.has_sief2)
>   		elf_hwcap |= HWCAP_SIE;
>   
> +	/* ultravisor-call (secure execution) */
> +	if (test_facility(158))
> +		elf_hwcap |= HWCAP_UV;
> +
>   	return 0;
>   }
>   arch_initcall(setup_hwcaps);
Heiko Carstens July 4, 2022, 10 a.m. UTC | #2
On Fri, Jul 01, 2022 at 12:10:18PM +0200, Christian Borntraeger wrote:
> Am 01.07.22 um 12:02 schrieb Steffen Eiden:
> > This patch adds a hardware capability for the Ultravisor.
> > This capability will be present if facility 158 is enabled.
> > 
> > Signed-off-by: Steffen Eiden <seiden@linux.ibm.com>
> > ---
> >   arch/s390/include/asm/elf.h  | 2 ++
> >   arch/s390/kernel/processor.c | 5 +++++
> >   2 files changed, 7 insertions(+)
> > 
> > diff --git a/arch/s390/include/asm/elf.h b/arch/s390/include/asm/elf.h
> > index 70a30ae258b7..3a5e89ce4fd0 100644
> > --- a/arch/s390/include/asm/elf.h
> > +++ b/arch/s390/include/asm/elf.h
> > @@ -115,6 +115,7 @@ enum {
> >   	HWCAP_NR_NNPA		= 20,
> >   	HWCAP_NR_PCI_MIO	= 21,
> >   	HWCAP_NR_SIE		= 22,
> > +	HWCAP_NR_UV		= 23,
> >   	HWCAP_NR_MAX
> >   };
> 
> question for Heiko, Vasily, Alexander. This certainly works.
> An alternative implementation would be to separate module_cpu_feature_match
> from HWCAP. (so uv would not be shown in /proc/cpuinfo and it would be
> seen in the aux vector). I would imagine that we might have more drivers
> in the future that depend on a facility but this facility is not really
> useful for userspace to know.
> 
> See arch/s390/include/asm/cpufeature.h
>  * Restrict the set of exposed CPU features to ELF hardware capabilities for
>  * now.  Additional machine flags can be indicated by values larger than
>  * MAX_ELF_HWCAP_FEATURES.
> 
> Any preference from your side?

I mentioned already before this RFC that my preferred solution would
be to have a solution which extends the existing method to work (also)
with facility bits - haven't checked if all existing users could be
converted to facility bits, but making it more flexible would work
certainly.

If Steffen is willing to do that, that would be very welcome.
Otherwise I'll put that on my todo list.
Steffen Eiden July 4, 2022, 11:35 a.m. UTC | #3
On 7/4/22 12:00, Heiko Carstens wrote:
> On Fri, Jul 01, 2022 at 12:10:18PM +0200, Christian Borntraeger wrote:

[ snip ]

>> Any preference from your side?
> 
> I mentioned already before this RFC that my preferred solution would
> be to have a solution which extends the existing method to work (also)
> with facility bits - haven't checked if all existing users could be
> converted to facility bits, but making it more flexible would work
> certainly.
> 
> If Steffen is willing to do that, that would be very welcome.
> Otherwise I'll put that on my todo list.

I'll have a look on that.
diff mbox series

Patch

diff --git a/arch/s390/include/asm/elf.h b/arch/s390/include/asm/elf.h
index 70a30ae258b7..3a5e89ce4fd0 100644
--- a/arch/s390/include/asm/elf.h
+++ b/arch/s390/include/asm/elf.h
@@ -115,6 +115,7 @@  enum {
 	HWCAP_NR_NNPA		= 20,
 	HWCAP_NR_PCI_MIO	= 21,
 	HWCAP_NR_SIE		= 22,
+	HWCAP_NR_UV		= 23,
 	HWCAP_NR_MAX
 };
 
@@ -142,6 +143,7 @@  enum {
 #define HWCAP_NNPA		BIT(HWCAP_NR_NNPA)
 #define HWCAP_PCI_MIO		BIT(HWCAP_NR_PCI_MIO)
 #define HWCAP_SIE		BIT(HWCAP_NR_SIE)
+#define HWCAP_UV		BIT(HWCAP_NR_UV)
 
 /*
  * These are used to set parameters in the core dumps.
diff --git a/arch/s390/kernel/processor.c b/arch/s390/kernel/processor.c
index aa0e0e7fc773..80ccd57a2b00 100644
--- a/arch/s390/kernel/processor.c
+++ b/arch/s390/kernel/processor.c
@@ -141,6 +141,7 @@  static void show_cpu_summary(struct seq_file *m, void *v)
 		[HWCAP_NR_NNPA]		= "nnpa",
 		[HWCAP_NR_PCI_MIO]	= "pcimio",
 		[HWCAP_NR_SIE]		= "sie",
+		[HWCAP_NR_UV]		= "uv",
 	};
 	int i, cpu;
 
@@ -249,6 +250,10 @@  static int __init setup_hwcaps(void)
 	if (sclp.has_sief2)
 		elf_hwcap |= HWCAP_SIE;
 
+	/* ultravisor-call (secure execution) */
+	if (test_facility(158))
+		elf_hwcap |= HWCAP_UV;
+
 	return 0;
 }
 arch_initcall(setup_hwcaps);