All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] xen/lib: Introduce printk_once() and replace some opencoded examples
@ 2019-05-17 18:58 ` Andrew Cooper
  0 siblings, 0 replies; 10+ messages in thread
From: Andrew Cooper @ 2019-05-17 18:58 UTC (permalink / raw)
  To: Xen-devel
  Cc: Stefano Stabellini, Wei Liu, Andrew Cooper, Julien Grall,
	Jan Beulich, Roger Pau Monné

Reflow the ZynqMP message for grepability, and fix the omission of a newline.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
---
CC: Jan Beulich <JBeulich@suse.com>
CC: Wei Liu <wei.liu2@citrix.com>
CC: Roger Pau Monné <roger.pau@citrix.com>
CC: Stefano Stabellini <sstabellini@kernel.org>
CC: Julien Grall <julien.grall@arm.com>
---
 xen/arch/arm/cpuerrata.c               | 18 ++----------------
 xen/arch/arm/platforms/xilinx-zynqmp.c |  9 ++-------
 xen/include/xen/lib.h                  | 11 +++++++++++
 3 files changed, 15 insertions(+), 23 deletions(-)

diff --git a/xen/arch/arm/cpuerrata.c b/xen/arch/arm/cpuerrata.c
index 4431b24..8904939 100644
--- a/xen/arch/arm/cpuerrata.c
+++ b/xen/arch/arm/cpuerrata.c
@@ -336,18 +336,11 @@ static bool has_ssbd_mitigation(const struct arm_cpu_capabilities *entry)
     switch ( ssbd_state )
     {
     case ARM_SSBD_FORCE_DISABLE:
-    {
-        static bool once = true;
-
-        if ( once )
-            printk("%s disabled from command-line\n", entry->desc);
-        once = false;
+        printk_once("%s disabled from command-line\n", entry->desc);
 
         arm_smccc_1_1_smc(ARM_SMCCC_ARCH_WORKAROUND_2_FID, 0, NULL);
         required = false;
-
         break;
-    }
 
     case ARM_SSBD_RUNTIME:
         if ( required )
@@ -359,18 +352,11 @@ static bool has_ssbd_mitigation(const struct arm_cpu_capabilities *entry)
         break;
 
     case ARM_SSBD_FORCE_ENABLE:
-    {
-        static bool once = true;
-
-        if ( once )
-            printk("%s forced from command-line\n", entry->desc);
-        once = false;
+        printk_once("%s forced from command-line\n", entry->desc);
 
         arm_smccc_1_1_smc(ARM_SMCCC_ARCH_WORKAROUND_2_FID, 1, NULL);
         required = true;
-
         break;
-    }
 
     default:
         ASSERT_UNREACHABLE();
diff --git a/xen/arch/arm/platforms/xilinx-zynqmp.c b/xen/arch/arm/platforms/xilinx-zynqmp.c
index 08e3e11..3060d79 100644
--- a/xen/arch/arm/platforms/xilinx-zynqmp.c
+++ b/xen/arch/arm/platforms/xilinx-zynqmp.c
@@ -35,14 +35,9 @@ static bool zynqmp_smc(struct cpu_user_regs *regs)
      */
     if ( !cpus_have_const_cap(ARM_SMCCC_1_1) )
     {
-        static bool once = true;
+        printk_once(XENLOG_WARNING
+                    "ZynqMP firmware Error: no SMCCC 1.1 support. Disabling firmware calls\n");
 
-        if ( once )
-        {
-            printk(XENLOG_WARNING "ZynqMP firmware Error: no SMCCC 1.1 "
-                   "support. Disabling firmware calls.");
-            once = false;
-        }
         return false;
     }
     return zynqmp_eemi(regs);
diff --git a/xen/include/xen/lib.h b/xen/include/xen/lib.h
index 91ed56c..ce231c5 100644
--- a/xen/include/xen/lib.h
+++ b/xen/include/xen/lib.h
@@ -105,6 +105,17 @@ debugtrace_printk(const char *fmt, ...) {}
 #define _p(_x) ((void *)(unsigned long)(_x))
 extern void printk(const char *format, ...)
     __attribute__ ((format (printf, 1, 2)));
+
+#define printk_once(fmt, args...)               \
+({                                              \
+    static bool __read_mostly once_;            \
+    if ( unlikely(!once_) )                     \
+    {                                           \
+        once_ = true;                           \
+        printk(fmt, ## args);                   \
+    }                                           \
+})
+
 extern void guest_printk(const struct domain *d, const char *format, ...)
     __attribute__ ((format (printf, 2, 3)));
 extern void noreturn panic(const char *format, ...)
-- 
2.1.4


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [Xen-devel] [PATCH 1/2] xen/lib: Introduce printk_once() and replace some opencoded examples
@ 2019-05-17 18:58 ` Andrew Cooper
  0 siblings, 0 replies; 10+ messages in thread
From: Andrew Cooper @ 2019-05-17 18:58 UTC (permalink / raw)
  To: Xen-devel
  Cc: Stefano Stabellini, Wei Liu, Andrew Cooper, Julien Grall,
	Jan Beulich, Roger Pau Monné

Reflow the ZynqMP message for grepability, and fix the omission of a newline.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
---
CC: Jan Beulich <JBeulich@suse.com>
CC: Wei Liu <wei.liu2@citrix.com>
CC: Roger Pau Monné <roger.pau@citrix.com>
CC: Stefano Stabellini <sstabellini@kernel.org>
CC: Julien Grall <julien.grall@arm.com>
---
 xen/arch/arm/cpuerrata.c               | 18 ++----------------
 xen/arch/arm/platforms/xilinx-zynqmp.c |  9 ++-------
 xen/include/xen/lib.h                  | 11 +++++++++++
 3 files changed, 15 insertions(+), 23 deletions(-)

diff --git a/xen/arch/arm/cpuerrata.c b/xen/arch/arm/cpuerrata.c
index 4431b24..8904939 100644
--- a/xen/arch/arm/cpuerrata.c
+++ b/xen/arch/arm/cpuerrata.c
@@ -336,18 +336,11 @@ static bool has_ssbd_mitigation(const struct arm_cpu_capabilities *entry)
     switch ( ssbd_state )
     {
     case ARM_SSBD_FORCE_DISABLE:
-    {
-        static bool once = true;
-
-        if ( once )
-            printk("%s disabled from command-line\n", entry->desc);
-        once = false;
+        printk_once("%s disabled from command-line\n", entry->desc);
 
         arm_smccc_1_1_smc(ARM_SMCCC_ARCH_WORKAROUND_2_FID, 0, NULL);
         required = false;
-
         break;
-    }
 
     case ARM_SSBD_RUNTIME:
         if ( required )
@@ -359,18 +352,11 @@ static bool has_ssbd_mitigation(const struct arm_cpu_capabilities *entry)
         break;
 
     case ARM_SSBD_FORCE_ENABLE:
-    {
-        static bool once = true;
-
-        if ( once )
-            printk("%s forced from command-line\n", entry->desc);
-        once = false;
+        printk_once("%s forced from command-line\n", entry->desc);
 
         arm_smccc_1_1_smc(ARM_SMCCC_ARCH_WORKAROUND_2_FID, 1, NULL);
         required = true;
-
         break;
-    }
 
     default:
         ASSERT_UNREACHABLE();
diff --git a/xen/arch/arm/platforms/xilinx-zynqmp.c b/xen/arch/arm/platforms/xilinx-zynqmp.c
index 08e3e11..3060d79 100644
--- a/xen/arch/arm/platforms/xilinx-zynqmp.c
+++ b/xen/arch/arm/platforms/xilinx-zynqmp.c
@@ -35,14 +35,9 @@ static bool zynqmp_smc(struct cpu_user_regs *regs)
      */
     if ( !cpus_have_const_cap(ARM_SMCCC_1_1) )
     {
-        static bool once = true;
+        printk_once(XENLOG_WARNING
+                    "ZynqMP firmware Error: no SMCCC 1.1 support. Disabling firmware calls\n");
 
-        if ( once )
-        {
-            printk(XENLOG_WARNING "ZynqMP firmware Error: no SMCCC 1.1 "
-                   "support. Disabling firmware calls.");
-            once = false;
-        }
         return false;
     }
     return zynqmp_eemi(regs);
diff --git a/xen/include/xen/lib.h b/xen/include/xen/lib.h
index 91ed56c..ce231c5 100644
--- a/xen/include/xen/lib.h
+++ b/xen/include/xen/lib.h
@@ -105,6 +105,17 @@ debugtrace_printk(const char *fmt, ...) {}
 #define _p(_x) ((void *)(unsigned long)(_x))
 extern void printk(const char *format, ...)
     __attribute__ ((format (printf, 1, 2)));
+
+#define printk_once(fmt, args...)               \
+({                                              \
+    static bool __read_mostly once_;            \
+    if ( unlikely(!once_) )                     \
+    {                                           \
+        once_ = true;                           \
+        printk(fmt, ## args);                   \
+    }                                           \
+})
+
 extern void guest_printk(const struct domain *d, const char *format, ...)
     __attribute__ ((format (printf, 2, 3)));
 extern void noreturn panic(const char *format, ...)
-- 
2.1.4


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 2/2] x86/mpparse: Don't print "limit reached" for every subsequent processor
@ 2019-05-17 18:58   ` Andrew Cooper
  0 siblings, 0 replies; 10+ messages in thread
From: Andrew Cooper @ 2019-05-17 18:58 UTC (permalink / raw)
  To: Xen-devel; +Cc: Andrew Cooper, Wei Liu, Jan Beulich, Roger Pau Monné

When you boot Xen with the default 256 NR_CPUS, on a box with rather more
processors, the resulting spew is unnecesserily verbose.  Instead, print the
message once, e.g:

 (XEN) ACPI: X2APIC (apic_id[0x115] uid[0x115] enabled)
 (XEN) WARNING: NR_CPUS limit of 256 reached - ignoring further processors
 (XEN) ACPI: X2APIC (apic_id[0x119] uid[0x119] enabled)
 (XEN) ACPI: X2APIC (apic_id[0x11d] uid[0x11d] enabled)
 (XEN) ACPI: X2APIC (apic_id[0x121] uid[0x121] enabled)

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
---
CC: Jan Beulich <JBeulich@suse.com>
CC: Wei Liu <wei.liu2@citrix.com>
CC: Roger Pau Monné <roger.pau@citrix.com>
---
 xen/arch/x86/mpparse.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/xen/arch/x86/mpparse.c b/xen/arch/x86/mpparse.c
index 16c93a9..f057d91 100644
--- a/xen/arch/x86/mpparse.c
+++ b/xen/arch/x86/mpparse.c
@@ -157,15 +157,16 @@ static int MP_processor_info_x(struct mpc_config_processor *m,
 	set_apicid(apicid, &phys_cpu_present_map);
 
 	if (num_processors >= nr_cpu_ids) {
-		printk(KERN_WARNING "WARNING: NR_CPUS limit of %u reached."
-			"  Processor ignored.\n", nr_cpu_ids);
+		printk_once(XENLOG_WARNING
+			    "WARNING: NR_CPUS limit of %u reached - ignoring further processors\n",
+			    nr_cpu_ids);
 		return -ENOSPC;
 	}
 
 	if (num_processors >= 8 && hotplug
 	    && genapic.name == apic_default.name) {
-		printk(KERN_WARNING "WARNING: CPUs limit of 8 reached."
-			" Processor ignored.\n");
+		printk_once(XENLOG_WARNING
+			    "WARNING: CPUs limit of 8 reached - ignoring futher processors\n");
 		return -ENOSPC;
 	}
 
-- 
2.1.4


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [Xen-devel] [PATCH 2/2] x86/mpparse: Don't print "limit reached" for every subsequent processor
@ 2019-05-17 18:58   ` Andrew Cooper
  0 siblings, 0 replies; 10+ messages in thread
From: Andrew Cooper @ 2019-05-17 18:58 UTC (permalink / raw)
  To: Xen-devel; +Cc: Andrew Cooper, Wei Liu, Jan Beulich, Roger Pau Monné

When you boot Xen with the default 256 NR_CPUS, on a box with rather more
processors, the resulting spew is unnecesserily verbose.  Instead, print the
message once, e.g:

 (XEN) ACPI: X2APIC (apic_id[0x115] uid[0x115] enabled)
 (XEN) WARNING: NR_CPUS limit of 256 reached - ignoring further processors
 (XEN) ACPI: X2APIC (apic_id[0x119] uid[0x119] enabled)
 (XEN) ACPI: X2APIC (apic_id[0x11d] uid[0x11d] enabled)
 (XEN) ACPI: X2APIC (apic_id[0x121] uid[0x121] enabled)

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
---
CC: Jan Beulich <JBeulich@suse.com>
CC: Wei Liu <wei.liu2@citrix.com>
CC: Roger Pau Monné <roger.pau@citrix.com>
---
 xen/arch/x86/mpparse.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/xen/arch/x86/mpparse.c b/xen/arch/x86/mpparse.c
index 16c93a9..f057d91 100644
--- a/xen/arch/x86/mpparse.c
+++ b/xen/arch/x86/mpparse.c
@@ -157,15 +157,16 @@ static int MP_processor_info_x(struct mpc_config_processor *m,
 	set_apicid(apicid, &phys_cpu_present_map);
 
 	if (num_processors >= nr_cpu_ids) {
-		printk(KERN_WARNING "WARNING: NR_CPUS limit of %u reached."
-			"  Processor ignored.\n", nr_cpu_ids);
+		printk_once(XENLOG_WARNING
+			    "WARNING: NR_CPUS limit of %u reached - ignoring further processors\n",
+			    nr_cpu_ids);
 		return -ENOSPC;
 	}
 
 	if (num_processors >= 8 && hotplug
 	    && genapic.name == apic_default.name) {
-		printk(KERN_WARNING "WARNING: CPUs limit of 8 reached."
-			" Processor ignored.\n");
+		printk_once(XENLOG_WARNING
+			    "WARNING: CPUs limit of 8 reached - ignoring futher processors\n");
 		return -ENOSPC;
 	}
 
-- 
2.1.4


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH 1/2] xen/lib: Introduce printk_once() and replace some opencoded examples
@ 2019-05-20  8:24   ` Jan Beulich
  0 siblings, 0 replies; 10+ messages in thread
From: Jan Beulich @ 2019-05-20  8:24 UTC (permalink / raw)
  To: Andrew Cooper
  Cc: xen-devel, Julien Grall, Stefano Stabellini, Wei Liu, Roger Pau Monne

>>> On 17.05.19 at 20:58, <andrew.cooper3@citrix.com> wrote:
> Reflow the ZynqMP message for grepability, and fix the omission of a newline.
> 
> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>

Reviewed-by: Jan Beulich <jbeulich@suse.com>
with two remarks:

> --- a/xen/include/xen/lib.h
> +++ b/xen/include/xen/lib.h
> @@ -105,6 +105,17 @@ debugtrace_printk(const char *fmt, ...) {}
>  #define _p(_x) ((void *)(unsigned long)(_x))
>  extern void printk(const char *format, ...)
>      __attribute__ ((format (printf, 1, 2)));
> +
> +#define printk_once(fmt, args...)               \
> +({                                              \
> +    static bool __read_mostly once_;            \
> +    if ( unlikely(!once_) )                     \
> +    {                                           \
> +        once_ = true;                           \
> +        printk(fmt, ## args);                   \
> +    }                                           \
> +})

Just like Linux we accept this having a small race window, i.e.
it not truly being "once" in unlikely cases. I think it would be
worthwhile to make this intention explicit in the commit
message.

Unlike Linux'es the macro doesn't have a "return value". Is
this intentional? I view this as particularly useful for the
WARN_ONCE() sort-of counterpart, but I have to admit I can't
immediately see a good use here, so I'm largely curious.
(The 2 uses I could find in x86-specific code in Linux look
to me like they'd better be WARN_ONCE().)

Jan



_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [Xen-devel] [PATCH 1/2] xen/lib: Introduce printk_once() and replace some opencoded examples
@ 2019-05-20  8:24   ` Jan Beulich
  0 siblings, 0 replies; 10+ messages in thread
From: Jan Beulich @ 2019-05-20  8:24 UTC (permalink / raw)
  To: Andrew Cooper
  Cc: xen-devel, Julien Grall, Stefano Stabellini, Wei Liu, Roger Pau Monne

>>> On 17.05.19 at 20:58, <andrew.cooper3@citrix.com> wrote:
> Reflow the ZynqMP message for grepability, and fix the omission of a newline.
> 
> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>

Reviewed-by: Jan Beulich <jbeulich@suse.com>
with two remarks:

> --- a/xen/include/xen/lib.h
> +++ b/xen/include/xen/lib.h
> @@ -105,6 +105,17 @@ debugtrace_printk(const char *fmt, ...) {}
>  #define _p(_x) ((void *)(unsigned long)(_x))
>  extern void printk(const char *format, ...)
>      __attribute__ ((format (printf, 1, 2)));
> +
> +#define printk_once(fmt, args...)               \
> +({                                              \
> +    static bool __read_mostly once_;            \
> +    if ( unlikely(!once_) )                     \
> +    {                                           \
> +        once_ = true;                           \
> +        printk(fmt, ## args);                   \
> +    }                                           \
> +})

Just like Linux we accept this having a small race window, i.e.
it not truly being "once" in unlikely cases. I think it would be
worthwhile to make this intention explicit in the commit
message.

Unlike Linux'es the macro doesn't have a "return value". Is
this intentional? I view this as particularly useful for the
WARN_ONCE() sort-of counterpart, but I have to admit I can't
immediately see a good use here, so I'm largely curious.
(The 2 uses I could find in x86-specific code in Linux look
to me like they'd better be WARN_ONCE().)

Jan



_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 2/2] x86/mpparse: Don't print "limit reached" for every subsequent processor
@ 2019-05-20  8:26     ` Jan Beulich
  0 siblings, 0 replies; 10+ messages in thread
From: Jan Beulich @ 2019-05-20  8:26 UTC (permalink / raw)
  To: Andrew Cooper; +Cc: xen-devel, Wei Liu, Roger Pau Monne

>>> On 17.05.19 at 20:58, <andrew.cooper3@citrix.com> wrote:
> When you boot Xen with the default 256 NR_CPUS, on a box with rather more
> processors, the resulting spew is unnecesserily verbose.  Instead, print the
> message once, e.g:
> 
>  (XEN) ACPI: X2APIC (apic_id[0x115] uid[0x115] enabled)
>  (XEN) WARNING: NR_CPUS limit of 256 reached - ignoring further processors
>  (XEN) ACPI: X2APIC (apic_id[0x119] uid[0x119] enabled)
>  (XEN) ACPI: X2APIC (apic_id[0x11d] uid[0x11d] enabled)
>  (XEN) ACPI: X2APIC (apic_id[0x121] uid[0x121] enabled)
> 
> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>

Reviewed-by: Jan Beulich <jbeulich@suse.com>



_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [Xen-devel] [PATCH 2/2] x86/mpparse: Don't print "limit reached" for every subsequent processor
@ 2019-05-20  8:26     ` Jan Beulich
  0 siblings, 0 replies; 10+ messages in thread
From: Jan Beulich @ 2019-05-20  8:26 UTC (permalink / raw)
  To: Andrew Cooper; +Cc: xen-devel, Wei Liu, Roger Pau Monne

>>> On 17.05.19 at 20:58, <andrew.cooper3@citrix.com> wrote:
> When you boot Xen with the default 256 NR_CPUS, on a box with rather more
> processors, the resulting spew is unnecesserily verbose.  Instead, print the
> message once, e.g:
> 
>  (XEN) ACPI: X2APIC (apic_id[0x115] uid[0x115] enabled)
>  (XEN) WARNING: NR_CPUS limit of 256 reached - ignoring further processors
>  (XEN) ACPI: X2APIC (apic_id[0x119] uid[0x119] enabled)
>  (XEN) ACPI: X2APIC (apic_id[0x11d] uid[0x11d] enabled)
>  (XEN) ACPI: X2APIC (apic_id[0x121] uid[0x121] enabled)
> 
> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>

Reviewed-by: Jan Beulich <jbeulich@suse.com>



_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 1/2] xen/lib: Introduce printk_once() and replace some opencoded examples
@ 2019-05-31 17:20   ` Julien Grall
  0 siblings, 0 replies; 10+ messages in thread
From: Julien Grall @ 2019-05-31 17:20 UTC (permalink / raw)
  To: Andrew Cooper, Xen-devel
  Cc: Stefano Stabellini, Wei Liu, Jan Beulich, Roger Pau Monné

Hi Andrew,

On 17/05/2019 19:58, Andrew Cooper wrote:
> Reflow the ZynqMP message for grepability, and fix the omission of a newline.
> 
> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>

Regardless Jan's comment:

Reviewed-by: Julien Grall <julien.grall@arm.com>

I will let Jan/You to commit the patch.

Cheers,

> ---
> CC: Jan Beulich <JBeulich@suse.com>
> CC: Wei Liu <wei.liu2@citrix.com>
> CC: Roger Pau Monné <roger.pau@citrix.com>
> CC: Stefano Stabellini <sstabellini@kernel.org>
> CC: Julien Grall <julien.grall@arm.com>
> ---
>   xen/arch/arm/cpuerrata.c               | 18 ++----------------
>   xen/arch/arm/platforms/xilinx-zynqmp.c |  9 ++-------
>   xen/include/xen/lib.h                  | 11 +++++++++++
>   3 files changed, 15 insertions(+), 23 deletions(-)
> 
> diff --git a/xen/arch/arm/cpuerrata.c b/xen/arch/arm/cpuerrata.c
> index 4431b24..8904939 100644
> --- a/xen/arch/arm/cpuerrata.c
> +++ b/xen/arch/arm/cpuerrata.c
> @@ -336,18 +336,11 @@ static bool has_ssbd_mitigation(const struct arm_cpu_capabilities *entry)
>       switch ( ssbd_state )
>       {
>       case ARM_SSBD_FORCE_DISABLE:
> -    {
> -        static bool once = true;
> -
> -        if ( once )
> -            printk("%s disabled from command-line\n", entry->desc);
> -        once = false;
> +        printk_once("%s disabled from command-line\n", entry->desc);
>   
>           arm_smccc_1_1_smc(ARM_SMCCC_ARCH_WORKAROUND_2_FID, 0, NULL);
>           required = false;
> -
>           break;
> -    }
>   
>       case ARM_SSBD_RUNTIME:
>           if ( required )
> @@ -359,18 +352,11 @@ static bool has_ssbd_mitigation(const struct arm_cpu_capabilities *entry)
>           break;
>   
>       case ARM_SSBD_FORCE_ENABLE:
> -    {
> -        static bool once = true;
> -
> -        if ( once )
> -            printk("%s forced from command-line\n", entry->desc);
> -        once = false;
> +        printk_once("%s forced from command-line\n", entry->desc);
>   
>           arm_smccc_1_1_smc(ARM_SMCCC_ARCH_WORKAROUND_2_FID, 1, NULL);
>           required = true;
> -
>           break;
> -    }
>   
>       default:
>           ASSERT_UNREACHABLE();
> diff --git a/xen/arch/arm/platforms/xilinx-zynqmp.c b/xen/arch/arm/platforms/xilinx-zynqmp.c
> index 08e3e11..3060d79 100644
> --- a/xen/arch/arm/platforms/xilinx-zynqmp.c
> +++ b/xen/arch/arm/platforms/xilinx-zynqmp.c
> @@ -35,14 +35,9 @@ static bool zynqmp_smc(struct cpu_user_regs *regs)
>        */
>       if ( !cpus_have_const_cap(ARM_SMCCC_1_1) )
>       {
> -        static bool once = true;
> +        printk_once(XENLOG_WARNING
> +                    "ZynqMP firmware Error: no SMCCC 1.1 support. Disabling firmware calls\n");
>   
> -        if ( once )
> -        {
> -            printk(XENLOG_WARNING "ZynqMP firmware Error: no SMCCC 1.1 "
> -                   "support. Disabling firmware calls.");
> -            once = false;
> -        }
>           return false;
>       }
>       return zynqmp_eemi(regs);
> diff --git a/xen/include/xen/lib.h b/xen/include/xen/lib.h
> index 91ed56c..ce231c5 100644
> --- a/xen/include/xen/lib.h
> +++ b/xen/include/xen/lib.h
> @@ -105,6 +105,17 @@ debugtrace_printk(const char *fmt, ...) {}
>   #define _p(_x) ((void *)(unsigned long)(_x))
>   extern void printk(const char *format, ...)
>       __attribute__ ((format (printf, 1, 2)));
> +
> +#define printk_once(fmt, args...)               \
> +({                                              \
> +    static bool __read_mostly once_;            \
> +    if ( unlikely(!once_) )                     \
> +    {                                           \
> +        once_ = true;                           \
> +        printk(fmt, ## args);                   \
> +    }                                           \
> +})
> +
>   extern void guest_printk(const struct domain *d, const char *format, ...)
>       __attribute__ ((format (printf, 2, 3)));
>   extern void noreturn panic(const char *format, ...)
> 

-- 
Julien Grall

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [Xen-devel] [PATCH 1/2] xen/lib: Introduce printk_once() and replace some opencoded examples
@ 2019-05-31 17:20   ` Julien Grall
  0 siblings, 0 replies; 10+ messages in thread
From: Julien Grall @ 2019-05-31 17:20 UTC (permalink / raw)
  To: Andrew Cooper, Xen-devel
  Cc: Stefano Stabellini, Wei Liu, Jan Beulich, Roger Pau Monné

Hi Andrew,

On 17/05/2019 19:58, Andrew Cooper wrote:
> Reflow the ZynqMP message for grepability, and fix the omission of a newline.
> 
> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>

Regardless Jan's comment:

Reviewed-by: Julien Grall <julien.grall@arm.com>

I will let Jan/You to commit the patch.

Cheers,

> ---
> CC: Jan Beulich <JBeulich@suse.com>
> CC: Wei Liu <wei.liu2@citrix.com>
> CC: Roger Pau Monné <roger.pau@citrix.com>
> CC: Stefano Stabellini <sstabellini@kernel.org>
> CC: Julien Grall <julien.grall@arm.com>
> ---
>   xen/arch/arm/cpuerrata.c               | 18 ++----------------
>   xen/arch/arm/platforms/xilinx-zynqmp.c |  9 ++-------
>   xen/include/xen/lib.h                  | 11 +++++++++++
>   3 files changed, 15 insertions(+), 23 deletions(-)
> 
> diff --git a/xen/arch/arm/cpuerrata.c b/xen/arch/arm/cpuerrata.c
> index 4431b24..8904939 100644
> --- a/xen/arch/arm/cpuerrata.c
> +++ b/xen/arch/arm/cpuerrata.c
> @@ -336,18 +336,11 @@ static bool has_ssbd_mitigation(const struct arm_cpu_capabilities *entry)
>       switch ( ssbd_state )
>       {
>       case ARM_SSBD_FORCE_DISABLE:
> -    {
> -        static bool once = true;
> -
> -        if ( once )
> -            printk("%s disabled from command-line\n", entry->desc);
> -        once = false;
> +        printk_once("%s disabled from command-line\n", entry->desc);
>   
>           arm_smccc_1_1_smc(ARM_SMCCC_ARCH_WORKAROUND_2_FID, 0, NULL);
>           required = false;
> -
>           break;
> -    }
>   
>       case ARM_SSBD_RUNTIME:
>           if ( required )
> @@ -359,18 +352,11 @@ static bool has_ssbd_mitigation(const struct arm_cpu_capabilities *entry)
>           break;
>   
>       case ARM_SSBD_FORCE_ENABLE:
> -    {
> -        static bool once = true;
> -
> -        if ( once )
> -            printk("%s forced from command-line\n", entry->desc);
> -        once = false;
> +        printk_once("%s forced from command-line\n", entry->desc);
>   
>           arm_smccc_1_1_smc(ARM_SMCCC_ARCH_WORKAROUND_2_FID, 1, NULL);
>           required = true;
> -
>           break;
> -    }
>   
>       default:
>           ASSERT_UNREACHABLE();
> diff --git a/xen/arch/arm/platforms/xilinx-zynqmp.c b/xen/arch/arm/platforms/xilinx-zynqmp.c
> index 08e3e11..3060d79 100644
> --- a/xen/arch/arm/platforms/xilinx-zynqmp.c
> +++ b/xen/arch/arm/platforms/xilinx-zynqmp.c
> @@ -35,14 +35,9 @@ static bool zynqmp_smc(struct cpu_user_regs *regs)
>        */
>       if ( !cpus_have_const_cap(ARM_SMCCC_1_1) )
>       {
> -        static bool once = true;
> +        printk_once(XENLOG_WARNING
> +                    "ZynqMP firmware Error: no SMCCC 1.1 support. Disabling firmware calls\n");
>   
> -        if ( once )
> -        {
> -            printk(XENLOG_WARNING "ZynqMP firmware Error: no SMCCC 1.1 "
> -                   "support. Disabling firmware calls.");
> -            once = false;
> -        }
>           return false;
>       }
>       return zynqmp_eemi(regs);
> diff --git a/xen/include/xen/lib.h b/xen/include/xen/lib.h
> index 91ed56c..ce231c5 100644
> --- a/xen/include/xen/lib.h
> +++ b/xen/include/xen/lib.h
> @@ -105,6 +105,17 @@ debugtrace_printk(const char *fmt, ...) {}
>   #define _p(_x) ((void *)(unsigned long)(_x))
>   extern void printk(const char *format, ...)
>       __attribute__ ((format (printf, 1, 2)));
> +
> +#define printk_once(fmt, args...)               \
> +({                                              \
> +    static bool __read_mostly once_;            \
> +    if ( unlikely(!once_) )                     \
> +    {                                           \
> +        once_ = true;                           \
> +        printk(fmt, ## args);                   \
> +    }                                           \
> +})
> +
>   extern void guest_printk(const struct domain *d, const char *format, ...)
>       __attribute__ ((format (printf, 2, 3)));
>   extern void noreturn panic(const char *format, ...)
> 

-- 
Julien Grall

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2019-05-31 17:20 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-05-17 18:58 [PATCH 1/2] xen/lib: Introduce printk_once() and replace some opencoded examples Andrew Cooper
2019-05-17 18:58 ` [Xen-devel] " Andrew Cooper
2019-05-17 18:58 ` [PATCH 2/2] x86/mpparse: Don't print "limit reached" for every subsequent processor Andrew Cooper
2019-05-17 18:58   ` [Xen-devel] " Andrew Cooper
2019-05-20  8:26   ` Jan Beulich
2019-05-20  8:26     ` [Xen-devel] " Jan Beulich
2019-05-20  8:24 ` [PATCH 1/2] xen/lib: Introduce printk_once() and replace some opencoded examples Jan Beulich
2019-05-20  8:24   ` [Xen-devel] " Jan Beulich
2019-05-31 17:20 ` Julien Grall
2019-05-31 17:20   ` [Xen-devel] " Julien Grall

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.