 
	
| [Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] Use of the "has_shutdown_code" code in v3.2
 
We're using the V3.2 of the hypervisor code and while tracking down a
suspend/resume bug, I came across the following code that caused me to
ask myself whether the "has_shutdown_code" should also be cleared when
the domain is resumed.
This hypercall will not set a new shutdown reason if the domain already
has the flag set to 1.  So, if a domain is suspended and then resumed,
the flag would remain set.
    case SCHEDOP_shutdown_code:
    {
        struct sched_shutdown sched_shutdown;
        ret = -EFAULT;
        if ( copy_from_guest(&sched_shutdown, arg, 1) )
            break;
        ret = 0;
        TRACE_3D(TRC_SCHED_SHUTDOWN_CODE,
                 current->domain->domain_id, current->vcpu_id,
                 sched_shutdown.reason);
        spin_lock(¤t->domain->shutdown_lock);
        if ( !current->domain->has_shutdown_code )
        {
            current->domain->shutdown_code = (u8)sched_shutdown.reason;
            current->domain->has_shutdown_code = 1;
        }
So I asked myself, should the domain_resume routine also clear that
flag?
void domain_resume(struct domain *d)
{
    struct vcpu *v;
    /*
     * Some code paths assume that shutdown status does not get reset
under
     * their feet (e.g., some assertions make this assumption).
     */
    domain_pause(d);
    spin_lock(&d->shutdown_lock);
    d->is_shutting_down = d->is_shut_down = 0;  <---- should it also
include: "d->has_shutdown_code = "
    for_each_vcpu ( d, v )
    {
        if ( v->paused_for_shutdown )
            vcpu_unpause(v);
        v->paused_for_shutdown = 0;
    }
    spin_unlock(&d->shutdown_lock);
    domain_unpause(d);
}
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
 
 
 | 
|  | Lists.xenproject.org is hosted with RackSpace, monitoring our |