[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] xen/arm: add warning if memory modules overlap
On Fri, Oct 11, 2019 at 05:58:35PM +0100, Julien Grall wrote: > Hi, > > Please at least remove the signature in the e-mail you reply to. The best > would be to trim the e-mail and answer right below the specific paragraph. > > > > >To make sure the module is going to get added, you'd need to do the > >check after the for loop. This means there's going to be multiple for > >loops just spread over the course of adding the boot modules rather than > >one place. > > I don't think you need to do the check after the loop. The only way to go > out of the loop in add_boot_module() is when i reached mods->nr_mods. See below. > > > >I had this before but decided against it but after changing it to both > >starts rather than the stand and end (ends look much uglier), it looks > >cleaner. > > > > for ( i = 0 ; i < mods->nr_mods-1; i++ ) > > for ( j = i+1 ; j < mods->nr_mods; j++ ) > > if ( ((mods->module[i].start >= mods->module[j].start) && > > (mods->module[i].start <= > > mods->module[j].start + mods->module[j].size)) || > > ((mods->module[j].start >= mods->module[i].start) && > > (mods->module[j].start <= > > mods->module[i].start + mods->module[i].size)) ) > > printk("WARNING: modules %-12s and %-12s overlap\n", > > boot_module_kind_as_string(mods->module[i].kind), > > boot_module_kind_as_string(mods->module[j].kind)); > > > >That's also a possibility. > > > >I just don't see a way around it, computationally. You can split where > >the loops are executed but in the end the same amount of checks/total > >iterations have to be run. > > > >I was talking to someone and he suggested you could just check Xen at > >early boot and then check other modules later. > > What's wrong with: > > diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c > index 705a917abf..ecd09ec698 100644 > --- a/xen/arch/arm/setup.c > +++ b/xen/arch/arm/setup.c > @@ -254,6 +254,10 @@ struct bootmodule __init > *add_boot_module(bootmodule_kind kind, > mod->domU = false; > return mod; > } > + > + if ((mod->start >= start) && > + (mod->start < (start + size))) > + printk("WARNING: modules...\n"); > } > > mod = &mods->module[mods->nr_mods++]; > > Cheers, > > -- > Julien Grall For that, you'd need to either check the start and end of the added module or the start of both. So something like: if ( ((mod->start >= start) && (mod->start < (start + size))) || ((start >= mod->start) && (start < (mod->start + mod->size))) ) printk("WARNING: ..."); If you don't you run the risk of having a module overlap but not at the start of the added module (unless there's a guaranteed order). You're still running all of the checks from what I can tell, just not in nested for loop so. Plus I'm not sure how many times add_boot_module gets run and the "mod->kind == kind .." if statement gets run and is true. If the above is true, wouldn't that cause extra checks for the for loop iterations before it was true? Brian _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |