|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 2/6] xen: add helper for calling notifier_call_chain() to common/cpu.c
Add a helper cpu_notifier_call_chain() to call notifier_call_chain()
for a cpu with a specified action, returning an errno value.
This avoids coding the same pattern multiple times.
Signed-off-by: Juergen Gross <jgross@xxxxxxxx>
---
xen/common/cpu.c | 50 +++++++++++++++++++++-----------------------------
1 file changed, 21 insertions(+), 29 deletions(-)
diff --git a/xen/common/cpu.c b/xen/common/cpu.c
index 836c62f97f..c436c0de7f 100644
--- a/xen/common/cpu.c
+++ b/xen/common/cpu.c
@@ -71,11 +71,18 @@ void __init register_cpu_notifier(struct notifier_block *nb)
spin_unlock(&cpu_add_remove_lock);
}
+static int cpu_notifier_call_chain(unsigned int cpu, unsigned long action,
+ struct notifier_block **nb)
+{
+ void *hcpu = (void *)(long)cpu;
+ int notifier_rc = notifier_call_chain(&cpu_chain, action, hcpu, nb);
+
+ return (notifier_rc == NOTIFY_DONE) ? 0 : notifier_to_errno(notifier_rc);
+}
+
static void _take_cpu_down(void *unused)
{
- void *hcpu = (void *)(long)smp_processor_id();
- int notifier_rc = notifier_call_chain(&cpu_chain, CPU_DYING, hcpu, NULL);
- BUG_ON(notifier_rc != NOTIFY_DONE);
+ BUG_ON(cpu_notifier_call_chain(smp_processor_id(), CPU_DYING, NULL));
__cpu_disable();
}
@@ -87,8 +94,7 @@ static int take_cpu_down(void *arg)
int cpu_down(unsigned int cpu)
{
- int err, notifier_rc;
- void *hcpu = (void *)(long)cpu;
+ int err;
struct notifier_block *nb = NULL;
if ( !cpu_hotplug_begin() )
@@ -100,12 +106,9 @@ int cpu_down(unsigned int cpu)
return -EINVAL;
}
- notifier_rc = notifier_call_chain(&cpu_chain, CPU_DOWN_PREPARE, hcpu, &nb);
- if ( notifier_rc != NOTIFY_DONE )
- {
- err = notifier_to_errno(notifier_rc);
+ err = cpu_notifier_call_chain(cpu, CPU_DOWN_PREPARE, &nb);
+ if ( err )
goto fail;
- }
if ( unlikely(system_state < SYS_STATE_active) )
on_selected_cpus(cpumask_of(cpu), _take_cpu_down, NULL, true);
@@ -115,24 +118,21 @@ int cpu_down(unsigned int cpu)
__cpu_die(cpu);
BUG_ON(cpu_online(cpu));
- notifier_rc = notifier_call_chain(&cpu_chain, CPU_DEAD, hcpu, NULL);
- BUG_ON(notifier_rc != NOTIFY_DONE);
+ BUG_ON(cpu_notifier_call_chain(cpu, CPU_DEAD, NULL));
send_global_virq(VIRQ_PCPU_STATE);
cpu_hotplug_done();
return 0;
fail:
- notifier_rc = notifier_call_chain(&cpu_chain, CPU_DOWN_FAILED, hcpu, &nb);
- BUG_ON(notifier_rc != NOTIFY_DONE);
+ BUG_ON(cpu_notifier_call_chain(cpu, CPU_DOWN_FAILED, &nb));
cpu_hotplug_done();
return err;
}
int cpu_up(unsigned int cpu)
{
- int notifier_rc, err = 0;
- void *hcpu = (void *)(long)cpu;
+ int err;
struct notifier_block *nb = NULL;
if ( !cpu_hotplug_begin() )
@@ -144,19 +144,15 @@ int cpu_up(unsigned int cpu)
return -EINVAL;
}
- notifier_rc = notifier_call_chain(&cpu_chain, CPU_UP_PREPARE, hcpu, &nb);
- if ( notifier_rc != NOTIFY_DONE )
- {
- err = notifier_to_errno(notifier_rc);
+ err = cpu_notifier_call_chain(cpu, CPU_UP_PREPARE, &nb);
+ if ( err )
goto fail;
- }
err = __cpu_up(cpu);
if ( err < 0 )
goto fail;
- notifier_rc = notifier_call_chain(&cpu_chain, CPU_ONLINE, hcpu, NULL);
- BUG_ON(notifier_rc != NOTIFY_DONE);
+ BUG_ON(cpu_notifier_call_chain(cpu, CPU_ONLINE, NULL));
send_global_virq(VIRQ_PCPU_STATE);
@@ -164,18 +160,14 @@ int cpu_up(unsigned int cpu)
return 0;
fail:
- notifier_rc = notifier_call_chain(&cpu_chain, CPU_UP_CANCELED, hcpu, &nb);
- BUG_ON(notifier_rc != NOTIFY_DONE);
+ BUG_ON(cpu_notifier_call_chain(cpu, CPU_UP_CANCELED, &nb));
cpu_hotplug_done();
return err;
}
void notify_cpu_starting(unsigned int cpu)
{
- void *hcpu = (void *)(long)cpu;
- int notifier_rc = notifier_call_chain(
- &cpu_chain, CPU_STARTING, hcpu, NULL);
- BUG_ON(notifier_rc != NOTIFY_DONE);
+ BUG_ON(cpu_notifier_call_chain(cpu, CPU_STARTING, NULL));
}
static cpumask_t frozen_cpus;
--
2.16.4
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |