[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v5 11/28] xsplice: Implement support for applying/reverting/replacing patches.
> >> So you check for there being one such section. Is having multiple > >> of them okay / meaningful? > > > > /me blinks. You can have multiple ELF sections with the same name? > > I will double-check the spec over the weekend to see. > > Of course you can. Remember me telling you that using section > names for identification is a bad idea (even if widely done that > way)? That's precisely because section names in the spec serve > no meaning other than making sections identifiable to the human > eye. For certain sections there's a more or less strict convention > on what their names should be, but that's all there is to names. > Section types and attributes really are what describe their > purposes. This is going to take a bit of time to get right I am afraid. (The checks are easy - but make sure the payload files that are generated are doing the right thing). > > And even if that really was forbidden by the spec, you'd still need > to make sure the binary meets the spec. Yes. > >> > +void check_for_xsplice_work(void) > >> > +{ > >> > + /* Set at -1, so will go up to num_online_cpus - 1. */ > >> > + if ( atomic_inc_and_test(&xsplice_work.semaphore) ) > >> > + { > >> > + struct payload *p; > >> > + unsigned int total_cpus; > >> > + > >> > + p = xsplice_work.data; > >> > + if ( !get_cpu_maps() ) > >> > + { > >> > + printk(XENLOG_ERR "%s%s: CPU%u - unable to get cpu_maps > >> > lock!\n", > >> > + XSPLICE, p->name, cpu); > >> > + per_cpu(work_to_do, cpu) = 0; > >> > + xsplice_work.data->rc = -EBUSY; > >> > + xsplice_work.do_work = 0; > >> > >> On x86 such possibly simultaneous accesses may be okay, but is > >> that universally the case? Wouldn't it better be only the monarch > >> which updates shared data? > > > > Monarch? Oh you mean arch specific code path? > > Oh, I think you call it "master" elsewhere. IA64 terminology which > I came to like. > The master CPU is the one updating it. > >> > + /* All CPUs are waiting, now signal to disable IRQs. */ > >> > + xsplice_work.ready = 1; > >> > + smp_wmb(); > >> > + > >> > + atomic_inc(&xsplice_work.irq_semaphore); > >> > + if ( !xsplice_do_wait(&xsplice_work.irq_semaphore, timeout, > >> > total_cpus, > >> > + "Timed out on IRQ semaphore") ) > >> > >> I'd prefer if the common parts of that message moved into > >> xsplice_do_wait() - no reason to have more string literal space > >> occupied than really needed. Also, looking back, the respective > >> function parameter could do with a more descriptive name. > >> > >> And then - does it make sense to wait the perhaps full 30ms > >> on this second step? Rendezvoused CPUs should react rather > >> quickly to the signal to disable interrupts. > > > > We don't reset the timeout - the timeout is for both calls > > to xsplice_do_wait. > > I understand that's the way it's right now, but that's what I'm putting > under question. Rendezvousing CPUs is quite a bit more at risk of > taking some time compared to having already rendezvoused CPUs > disable their IRQs. Yes. I could expand the timeout, but maybe have some reset (add more timeout) once CPUs come along? > >> > static int __init xsplice_init(void) > >> > { > >> > + BUILD_BUG_ON( sizeof(struct xsplice_patch_func) != 64 ); > >> > + BUILD_BUG_ON( offsetof(struct xsplice_patch_func, new_addr) != 8 ); > >> > + BUILD_BUG_ON( offsetof(struct xsplice_patch_func, new_size) != 24 ); > >> > >> What assumptions get broken if these sizes change? > > > > I think you mean the offsets? They can change. I added them to make sure > > that on 32-bit hypervisor (ARM) the offsets would be the same as on 64-bit > > hypervisor (x86). > > > > The size however MUST remain the same - otherwise the toolstack won't > > produce proper payloads anymore. > > Well, that's a very bad thing then imo. You'd better version the > structure instead. Andrew reminded me that we also will have build-ids. Those by nature imply a version. That is the payload won't ever apply against a different type hypervisor. But I still added a version field in the struct so when we get the 'checking the old code' we have a mechanism to select -build-id or the newer way. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |