[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-ia64-devel] Re: [PATCH]: ptc.ga for SMP-g



Le Jeudi 30 Mars 2006 10:42, Tian, Kevin a écrit :
> From: Tristan Gingold
>
> >Sent: 2006年3月30日 16:31
> >
> >Le Mardi 28 Mars 2006 04:04, Isaku Yamahata a écrit :
> >> Hi Tristan.
> >>
> >>
> >> +                  /* Purge tc entry.
> >> +                     Can we do this directly ?  Well, this is just a
> >> +                     single atomic write.  */
> >> +                  vcpu_purge_tr_entry(&PSCBX(v,dtlb));
> >> +                  vcpu_purge_tr_entry(&PSCBX(v,itlb));
> >>
> >> These aren't SMP-safe because dtlb isn't read atomically.
> >> From vcpu_translate()
> >>
> >> #define vcpu_match_tr_entry(_trp,_ifa,_rid)             \
> >>     ((_trp->p && (_trp->rid==_rid) && (_ifa >= _trp->vadr) &&   \
> >>     (_ifa < (_trp->vadr + (1L<< _trp->ps)) - 1)))
> >>
> >>         trp = &vcpu->arch.dtlb;
> >>         if (/* is_data && */ vcpu_match_tr_entry(trp,address,rid)) {
> >>                 <<<<<<<<<<<<If other processor executes
> >>                             vcpu_purge_tr_entry(&PSCBX(v,dtlb))
> >
> >here,
> >
> >>                             then a disaster will happen
> >
> >Can you elaborate ? Do you have a disaster scenario ?
> >vcpu_purge_tr_entry only clears the p bit.
>
> I think it's not safe for one vcpu to operate date structure on another
> vcpu. For example, current vcpu is doing vcpu_match_tr_entry. Just after
> checking _trp->p, then another vcpu invokes vcpu_purge_tr_entry to clear
> _trp->p. In this case, vcpu_match_tr_entry should return false however it
> may return true based on old knowledge since the whole check is not atomic.
This is as if the purge was done a few cycles after the checks.

> The preferred way is to only purge entry on its own context by sending IPI.
> For example, you can put vcpu_purge_tr_entry into ptc_ga_remote_func
> which will execute in right vcpu owning that entry.
Ok for this scheme.

I think there are two methods:
* either doing all the work with IPI (purge and ptc.l)
* or doing all the work locally (writing into other vcpu and ptc.ga)

I don't know which one is the best.

The main problem with IPI is migration.  However, currently migration doesn't 
work well.  I think it is ok to migrate a vcpu from CPU X to CPU Y, but we 
don't support migrating back from CPU Y to CPU X.

Tristan.



_______________________________________________
Xen-ia64-devel mailing list
Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-ia64-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.