362 smi_info->curr_msg = NULL;
363 rv = SI_SM_IDLE;
364 } else {
365 int err;
366
367 list_del(entry);
368 smi_info->curr_msg = list_entry(entry,
369 struct ipmi_smi_msg,
370 link);
371#ifdef DEBUG_TIMING
372 do_gettimeofday(&t);
373 printk(KERN_DEBUG "**Start2: %d.%9.9d\n", t.tv_sec, t.tv_usec);
374#endif
375 err = atomic_notifier_call_chain(&xaction_notifier_list,
376 0, smi_info);
377 if (err & NOTIFY_STOP_MASK) {
378 rv = SI_SM_CALL_WITHOUT_DELAY;
379 goto out;
380 }
381 err = smi_info->handlers->start_transaction(
382 smi_info->si_sm,
383 smi_info->curr_msg->data,
384 smi_info->curr_msg->data_size);
385 if (err)
386 return_hosed_msg(smi_info, err);
387
388 rv = SI_SM_CALL_WITHOUT_DELAY;
389 }
390 out:
391 if (!smi_info->run_to_completion)
392 spin_unlock(&(smi_info->msg_lock));
393
394 return rv;
395}
396
397static void start_enable_irq(struct smi_info *smi_info)
398{
399 unsigned char msg[2];
400
401
402