}
e = list_entry(sal_queue[in1].next,
sal_queue_entry_t, list);
+
+ list_del(&e->list);
spin_unlock_irqrestore(&sal_queue_lock, flags);
IA64_SAL_DEBUG("SAL_GET_STATE_INFO(%s <= %s) "
r9 = arg.ret;
status = arg.status;
if (r9 == 0) {
+ xfree(e);
+ } else {
+ /* Re-add the entry to sal_queue */
spin_lock_irqsave(&sal_queue_lock, flags);
- list_del(&e->list);
+ list_add(&e->list, &sal_queue[in1]);
spin_unlock_irqrestore(&sal_queue_lock, flags);
- xfree(e);
}
} else {
status = IA64_SAL_NO_INFORMATION_AVAILABLE;
"on CPU#%d.\n",
rec_name[e->sal_info_type],
rec_name[in1], e->cpuid);
-
arg.type = e->sal_info_type;
arg.status = 0;
+
if (e->cpuid == smp_processor_id()) {
IA64_SAL_DEBUG("SAL_CLEAR_STATE_INFO: local\n");
clear_state_info_on(&arg);