* [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.