Rename HYPERVISOR_multicall (which performs the multicall hypercall) to

_HYPERVISOR_multicall, and create a new HYPERVISOR_multicall function which
invokes _HYPERVISOR_multicall and checks that the individual hypercalls all
succeeded.
This commit is contained in:
Colin Percival 2010-11-25 15:05:21 +00:00
parent 6324ca614d
commit 1a3b2b87de
2 changed files with 23 additions and 1 deletions

View File

@ -234,8 +234,9 @@ HYPERVISOR_memory_op(
return _hypercall2(int, memory_op, cmd, arg);
}
int HYPERVISOR_multicall(multicall_entry_t *, int);
static inline int
HYPERVISOR_multicall(
_HYPERVISOR_multicall(
void *call_list, int nr_calls)
{
return _hypercall2(int, multicall, call_list, nr_calls);

View File

@ -1177,6 +1177,27 @@ trap_info_t trap_table[] = {
{ 0, 0, 0, 0 }
};
/* Perform a multicall and check that individual calls succeeded. */
int
HYPERVISOR_multicall(struct multicall_entry * call_list, int nr_calls)
{
int ret = 0;
int i;
/* Perform the multicall. */
PANIC_IF(_HYPERVISOR_multicall(call_list, nr_calls));
/* Check the results of individual hypercalls. */
for (i = 0; i < nr_calls; i++)
if (unlikely(call_list[i].result < 0))
ret++;
if (unlikely(ret > 0))
panic("%d multicall(s) failed: cpu %d\n",
ret, smp_processor_id());
/* If we didn't panic already, everything succeeded. */
return (0);
}
/********** CODE WORTH KEEPING ABOVE HERE *****************/