[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3 08/10] xen/arm: Release timer interrupts when CPU is hot-unplugged
Hi Julien, On Mon, Apr 30, 2018 at 5:58 PM, Julien Grall <julien.grall@xxxxxxx> wrote: > Hi, > > > On 27/04/18 18:12, Mirela Simonovic wrote: >> >> When a CPU is hot-unplugged timer interrupts have to be released >> in order to free the memory that was allocated when the interrupts >> were requested (using request_irq()). The request_irq is called >> for each timer interrupt when the CPU gets hotplugged >> (start_secondary->init_timer_interrupt->request_irq). >> With this patch the timer interrupts will be released when the >> newly added callback receives CPU_DYING event. >> >> Signed-off-by: Mirela Simonovic <mirela.simonovic@xxxxxxxxxx> >> >> --- >> CC: Stefano Stabellini <sstabellini@xxxxxxxxxx> >> CC: Julien Grall <julien.grall@xxxxxxx> >> --- >> Changes in v3: >> -Trigger releasing of timer interrupts using notifiers >> --- >> xen/arch/arm/time.c | 39 +++++++++++++++++++++++++++++++++++++++ >> 1 file changed, 39 insertions(+) >> >> diff --git a/xen/arch/arm/time.c b/xen/arch/arm/time.c >> index c11fcfeadd..c7317e4639 100644 >> --- a/xen/arch/arm/time.c >> +++ b/xen/arch/arm/time.c >> @@ -29,6 +29,8 @@ >> #include <xen/sched.h> >> #include <xen/event.h> >> #include <xen/acpi.h> >> +#include <xen/notifier.h> >> +#include <xen/cpu.h> >> #include <asm/system.h> >> #include <asm/time.h> >> #include <asm/vgic.h> >> @@ -312,6 +314,17 @@ void init_timer_interrupt(void) >> check_timer_irq_cfg(timer_irq[TIMER_PHYS_NONSECURE_PPI], >> "NS-physical"); >> } >> +/* >> + * Revert actions done in init_timer_interrupt that are required to >> properly >> + * disable this CPU. >> + */ >> +static void deinit_timer_interrupt(void) >> +{ > > > Any reason to not disable the timer here? But I think we need to finish the > discussion on the previous series regarding the purpose of the mdelay before > going further with that patch. See patch v2 7/10. I would also appreciate > answer to my question there. > I just missed it. Will add disabling timers. > >> + release_irq(timer_irq[TIMER_HYP_PPI], NULL); >> + release_irq(timer_irq[TIMER_VIRT_PPI], NULL); >> + release_irq(timer_irq[TIMER_PHYS_NONSECURE_PPI], NULL); >> +} >> + >> /* Wait a set number of microseconds */ >> void udelay(unsigned long usecs) >> { >> @@ -340,6 +353,32 @@ void domain_set_time_offset(struct domain *d, int64_t >> time_offset_seconds) >> /* XXX update guest visible wallclock time */ >> } >> +static int cpu_time_callback( >> + struct notifier_block *nfb, unsigned long action, void *hcpu) >> +{ >> + switch ( action ) >> + { >> + case CPU_DYING: >> + deinit_timer_interrupt(); >> + break; >> + default: >> + break; >> + } >> + >> + return NOTIFY_DONE; >> +} >> + >> +static struct notifier_block cpu_time_nfb = { >> + .notifier_call = cpu_time_callback, >> +}; >> + >> +static int __init cpu_time_notifier_init(void) >> +{ >> + register_cpu_notifier(&cpu_time_nfb); >> + return 0; >> +} >> +__initcall(cpu_time_notifier_init); >> + >> /* >> * Local variables: >> * mode: C >> > > Cheers, > > -- > Julien Grall Thanks, Mirela _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |