All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/3] xen/x86: Simplify init_ioapic()
@ 2020-04-04 10:26 Julien Grall
  2020-04-04 10:26 ` [PATCH v2 1/3] xen/x86: ioapic: Use true/false in bad_ioapic_register() Julien Grall
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Julien Grall @ 2020-04-04 10:26 UTC (permalink / raw)
  To: xen-devel
  Cc: julien, Wei Liu, Andrew Cooper, Julien Grall, Jan Beulich,
	Roger Pau Monné

From: Julien Grall <jgrall@amazon.com>

Hi all,

The main goal of this small series is to simplify init_ioapic().

Cheers,

Julien Grall (3):
  xen/x86: ioapic: Use true/false in bad_ioapic_register()
  xen/x86: ioapic: Rename init_ioapic_mappings() to ioapic_init()
  xen/x86: ioapic: Simplify ioapic_init()

 xen/arch/x86/apic.c           |  2 +-
 xen/arch/x86/io_apic.c        | 65 ++++++++++++++++-------------------
 xen/include/asm-x86/io_apic.h |  2 +-
 3 files changed, 32 insertions(+), 37 deletions(-)

-- 
2.17.1



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

* [PATCH v2 1/3] xen/x86: ioapic: Use true/false in bad_ioapic_register()
  2020-04-04 10:26 [PATCH v2 0/3] xen/x86: Simplify init_ioapic() Julien Grall
@ 2020-04-04 10:26 ` Julien Grall
  2020-04-04 10:26 ` [PATCH v2 2/3] xen/x86: ioapic: Rename init_ioapic_mappings() to ioapic_init() Julien Grall
  2020-04-04 10:26 ` [PATCH v2 3/3] xen/x86: ioapic: Simplify ioapic_init() Julien Grall
  2 siblings, 0 replies; 6+ messages in thread
From: Julien Grall @ 2020-04-04 10:26 UTC (permalink / raw)
  To: xen-devel
  Cc: julien, Wei Liu, Andrew Cooper, Julien Grall, Jan Beulich,
	Roger Pau Monné

From: Julien Grall <jgrall@amazon.com>

bad_ioapic_register() is returning a bool, so we should switch to
true/false.

Signed-off-by: Julien Grall <jgrall@amazon.com>
Reviewed-by: Wei Liu <wl@xen.org>
Acked-by: Jan Beulich <jbeulich@suse.com>

---
    Changes in v2:
        - Add Wei's reviewed-by
        - Fix typo
        - Add Jan's acked-by
---
 xen/arch/x86/io_apic.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/xen/arch/x86/io_apic.c b/xen/arch/x86/io_apic.c
index e98e08e9c8..9868933287 100644
--- a/xen/arch/x86/io_apic.c
+++ b/xen/arch/x86/io_apic.c
@@ -2531,10 +2531,10 @@ static __init bool bad_ioapic_register(unsigned int idx)
     {
         printk(KERN_WARNING "I/O APIC %#x registers return all ones, skipping!\n",
                mp_ioapics[idx].mpc_apicaddr);
-        return 1;
+        return true;
     }
 
-    return 0;
+    return false;
 }
 
 void __init init_ioapic_mappings(void)
-- 
2.17.1



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

* [PATCH v2 2/3] xen/x86: ioapic: Rename init_ioapic_mappings() to ioapic_init()
  2020-04-04 10:26 [PATCH v2 0/3] xen/x86: Simplify init_ioapic() Julien Grall
  2020-04-04 10:26 ` [PATCH v2 1/3] xen/x86: ioapic: Use true/false in bad_ioapic_register() Julien Grall
@ 2020-04-04 10:26 ` Julien Grall
  2020-04-04 10:26 ` [PATCH v2 3/3] xen/x86: ioapic: Simplify ioapic_init() Julien Grall
  2 siblings, 0 replies; 6+ messages in thread
From: Julien Grall @ 2020-04-04 10:26 UTC (permalink / raw)
  To: xen-devel
  Cc: julien, Wei Liu, Andrew Cooper, Julien Grall, Jan Beulich,
	Roger Pau Monné

From: Julien Grall <jgrall@amazon.com>

The function init_ioapic_mappings() is doing more than initialization
mappings. It is also initialization the number of IRQs/GSIs supported.

So rename the function to ioapic_init().

Signed-off-by: Julien Grall <jgrall@amazon.com>
Reviewed-by: Roger Pau Monné <roger.pau@citrix.com>
Acked-by: Jan Beulich <jbeulich@suse.com>

---
    Changes in v2:
        - Rename to ioapic_init() rather than init_ioapic().
        - Add Roger's reviewed-by
        - Add Jan's acked-by
---
 xen/arch/x86/apic.c           | 2 +-
 xen/arch/x86/io_apic.c        | 2 +-
 xen/include/asm-x86/io_apic.h | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/xen/arch/x86/apic.c b/xen/arch/x86/apic.c
index cde67cd87e..71f4efb2fe 100644
--- a/xen/arch/x86/apic.c
+++ b/xen/arch/x86/apic.c
@@ -978,7 +978,7 @@ __next:
         boot_cpu_physical_apicid = get_apic_id();
     x86_cpu_to_apicid[0] = get_apic_id();
 
-    init_ioapic_mappings();
+    ioapic_init();
 }
 
 /*****************************************************************************
diff --git a/xen/arch/x86/io_apic.c b/xen/arch/x86/io_apic.c
index 9868933287..8233eb44e1 100644
--- a/xen/arch/x86/io_apic.c
+++ b/xen/arch/x86/io_apic.c
@@ -2537,7 +2537,7 @@ static __init bool bad_ioapic_register(unsigned int idx)
     return false;
 }
 
-void __init init_ioapic_mappings(void)
+void __init ioapic_init(void)
 {
     unsigned long ioapic_phys;
     unsigned int i, idx = FIX_IO_APIC_BASE_0;
diff --git a/xen/include/asm-x86/io_apic.h b/xen/include/asm-x86/io_apic.h
index 998905186b..e006b2b8dd 100644
--- a/xen/include/asm-x86/io_apic.h
+++ b/xen/include/asm-x86/io_apic.h
@@ -180,7 +180,7 @@ extern int io_apic_get_version (int ioapic);
 extern int io_apic_get_redir_entries (int ioapic);
 extern int io_apic_set_pci_routing (int ioapic, int pin, int irq, int edge_level, int active_high_low);
 
-extern void init_ioapic_mappings(void);
+extern void ioapic_init(void);
 
 extern void ioapic_suspend(void);
 extern void ioapic_resume(void);
-- 
2.17.1



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

* [PATCH v2 3/3] xen/x86: ioapic: Simplify ioapic_init()
  2020-04-04 10:26 [PATCH v2 0/3] xen/x86: Simplify init_ioapic() Julien Grall
  2020-04-04 10:26 ` [PATCH v2 1/3] xen/x86: ioapic: Use true/false in bad_ioapic_register() Julien Grall
  2020-04-04 10:26 ` [PATCH v2 2/3] xen/x86: ioapic: Rename init_ioapic_mappings() to ioapic_init() Julien Grall
@ 2020-04-04 10:26 ` Julien Grall
  2020-04-06 13:24   ` Jan Beulich
  2 siblings, 1 reply; 6+ messages in thread
From: Julien Grall @ 2020-04-04 10:26 UTC (permalink / raw)
  To: xen-devel
  Cc: julien, Wei Liu, Andrew Cooper, Julien Grall, Jan Beulich,
	Roger Pau Monné

From: Julien Grall <jgrall@amazon.com>

Since commit 9facd54a45 "x86/ioapic: Add register level checks to detect
bogus io-apic entries", Xen is able to cope with IO APICs not mapped in
the fixmap.

Therefore the whole logic to allocate a fake page for some IO APICs is
unnecessary.

With the logic removed, the code can be simplified a lot as we don't
need to go through all the IO APIC if SMP has not been detected or a
bogus zero IO-APIC address has been detected.

To avoid another level of tabulation, the simplification is now moved in
its own function.

Signed-off-by: Julien Grall <jgrall@amazon.com>

---
    Changes in v2:
        - Don't set ioapic_phys twice in a row
        - Rename init_ioapic_mappings() to ioapic_init_mappings()
        - Use paddr_t rather than unsigned long
        - Move nr_irq_gsis = 0 in ioapic_init_mappings()
---
 xen/arch/x86/io_apic.c | 61 +++++++++++++++++++-----------------------
 1 file changed, 28 insertions(+), 33 deletions(-)

diff --git a/xen/arch/x86/io_apic.c b/xen/arch/x86/io_apic.c
index 8233eb44e1..878ee5192d 100644
--- a/xen/arch/x86/io_apic.c
+++ b/xen/arch/x86/io_apic.c
@@ -2537,34 +2537,26 @@ static __init bool bad_ioapic_register(unsigned int idx)
     return false;
 }
 
-void __init ioapic_init(void)
+static void __init ioapic_init_mappings(void)
 {
-    unsigned long ioapic_phys;
     unsigned int i, idx = FIX_IO_APIC_BASE_0;
-    union IO_APIC_reg_01 reg_01;
 
-    if ( smp_found_config )
-        nr_irqs_gsi = 0;
+    nr_irqs_gsi = 0;
+
     for ( i = 0; i < nr_ioapics; i++ )
     {
-        if ( smp_found_config )
-        {
-            ioapic_phys = mp_ioapics[i].mpc_apicaddr;
-            if ( !ioapic_phys )
-            {
-                printk(KERN_ERR "WARNING: bogus zero IO-APIC address "
-                       "found in MPTABLE, disabling IO/APIC support!\n");
-                smp_found_config = false;
-                skip_ioapic_setup = true;
-                goto fake_ioapic_page;
-            }
-        }
-        else
+        union IO_APIC_reg_01 reg_01;
+        paddr_t ioapic_phys = mp_ioapics[i].mpc_apicaddr;
+
+        if ( !ioapic_phys )
         {
- fake_ioapic_page:
-            ioapic_phys = __pa(alloc_xenheap_page());
-            clear_page(__va(ioapic_phys));
+            printk(KERN_ERR
+                   "WARNING: bogus zero IO-APIC address found in MPTABLE, disabling IO/APIC support!\n");
+            smp_found_config = false;
+            skip_ioapic_setup = true;
+            break;
         }
+
         set_fixmap_nocache(idx, ioapic_phys);
         apic_printk(APIC_VERBOSE, "mapped IOAPIC to %08Lx (%08lx)\n",
                     __fix_to_virt(idx), ioapic_phys);
@@ -2576,19 +2568,22 @@ void __init ioapic_init(void)
             continue;
         }
 
-        if ( smp_found_config )
-        {
-            /* The number of IO-APIC IRQ registers (== #pins): */
-            reg_01.raw = io_apic_read(i, 1);
-            nr_ioapic_entries[i] = reg_01.bits.entries + 1;
-            nr_irqs_gsi += nr_ioapic_entries[i];
-
-            if ( rangeset_add_singleton(mmio_ro_ranges,
-                                        ioapic_phys >> PAGE_SHIFT) )
-                printk(KERN_ERR "Failed to mark IO-APIC page %lx read-only\n",
-                       ioapic_phys);
-        }
+        /* The number of IO-APIC IRQ registers (== #pins): */
+        reg_01.raw = io_apic_read(i, 1);
+        nr_ioapic_entries[i] = reg_01.bits.entries + 1;
+        nr_irqs_gsi += nr_ioapic_entries[i];
+
+        if ( rangeset_add_singleton(mmio_ro_ranges,
+                                    ioapic_phys >> PAGE_SHIFT) )
+            printk(KERN_ERR "Failed to mark IO-APIC page %lx read-only\n",
+                   ioapic_phys);
     }
+}
+
+void __init ioapic_init(void)
+{
+    if ( smp_found_config )
+        ioapic_init_mappings();
 
     nr_irqs_gsi = max(nr_irqs_gsi, highest_gsi() + 1);
 
-- 
2.17.1



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

* Re: [PATCH v2 3/3] xen/x86: ioapic: Simplify ioapic_init()
  2020-04-04 10:26 ` [PATCH v2 3/3] xen/x86: ioapic: Simplify ioapic_init() Julien Grall
@ 2020-04-06 13:24   ` Jan Beulich
  2020-04-10 11:26     ` Julien Grall
  0 siblings, 1 reply; 6+ messages in thread
From: Jan Beulich @ 2020-04-06 13:24 UTC (permalink / raw)
  To: Julien Grall
  Cc: xen-devel, Julien Grall, Roger Pau Monné, Wei Liu, Andrew Cooper

On 04.04.2020 12:26, Julien Grall wrote:
> From: Julien Grall <jgrall@amazon.com>
> 
> Since commit 9facd54a45 "x86/ioapic: Add register level checks to detect
> bogus io-apic entries", Xen is able to cope with IO APICs not mapped in
> the fixmap.
> 
> Therefore the whole logic to allocate a fake page for some IO APICs is
> unnecessary.
> 
> With the logic removed, the code can be simplified a lot as we don't
> need to go through all the IO APIC if SMP has not been detected or a
> bogus zero IO-APIC address has been detected.
> 
> To avoid another level of tabulation, the simplification is now moved in
> its own function.
> 
> Signed-off-by: Julien Grall <jgrall@amazon.com>

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


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

* Re: [PATCH v2 3/3] xen/x86: ioapic: Simplify ioapic_init()
  2020-04-06 13:24   ` Jan Beulich
@ 2020-04-10 11:26     ` Julien Grall
  0 siblings, 0 replies; 6+ messages in thread
From: Julien Grall @ 2020-04-10 11:26 UTC (permalink / raw)
  To: Jan Beulich
  Cc: xen-devel, Julien Grall, Roger Pau Monné, Wei Liu, Andrew Cooper

Hi Jan,

On 06/04/2020 14:24, Jan Beulich wrote:
> On 04.04.2020 12:26, Julien Grall wrote:
>> From: Julien Grall <jgrall@amazon.com>
>>
>> Since commit 9facd54a45 "x86/ioapic: Add register level checks to detect
>> bogus io-apic entries", Xen is able to cope with IO APICs not mapped in
>> the fixmap.
>>
>> Therefore the whole logic to allocate a fake page for some IO APICs is
>> unnecessary.
>>
>> With the logic removed, the code can be simplified a lot as we don't
>> need to go through all the IO APIC if SMP has not been detected or a
>> bogus zero IO-APIC address has been detected.
>>
>> To avoid another level of tabulation, the simplification is now moved in
>> its own function.
>>
>> Signed-off-by: Julien Grall <jgrall@amazon.com>
> 
> Reviewed-by: Jan Beulich <jbeulich@suse.com>

Thank you! I took the liberty to push them.

Cheers,

-- 
Julien Grall


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

end of thread, other threads:[~2020-04-10 11:27 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-04 10:26 [PATCH v2 0/3] xen/x86: Simplify init_ioapic() Julien Grall
2020-04-04 10:26 ` [PATCH v2 1/3] xen/x86: ioapic: Use true/false in bad_ioapic_register() Julien Grall
2020-04-04 10:26 ` [PATCH v2 2/3] xen/x86: ioapic: Rename init_ioapic_mappings() to ioapic_init() Julien Grall
2020-04-04 10:26 ` [PATCH v2 3/3] xen/x86: ioapic: Simplify ioapic_init() Julien Grall
2020-04-06 13:24   ` Jan Beulich
2020-04-10 11:26     ` 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.