|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH for-xen-4.5 v3 04/16] x86: Introduce MultiBoot Data (MBD) type
>>> On 14.10.14 at 18:03, <daniel.kiper@xxxxxxxxxx> wrote:
> On Tue, Oct 14, 2014 at 04:27:13PM +0100, Jan Beulich wrote:
>> >>> On 08.10.14 at 19:52, <daniel.kiper@xxxxxxxxxx> wrote:
>> > +static mbd_t __used *__reloc(void *mbi)
>> > +{
>> > + mbd_t *mbd;
>> >
>> > - /* Mask features we don't understand or don't relocate. */
>> > - mbi->flags &= (MBI_MEMLIMITS |
>> > - MBI_BOOTDEV |
>> > - MBI_CMDLINE |
>> > - MBI_MODULES |
>> > - MBI_MEMMAP |
>> > - MBI_LOADERNAME);
>> > + mbd = (mbd_t *)alloc_struct(sizeof(mbd_t));
>> > + zero_struct((u32)mbd, sizeof(mbd_t));
>>
>> Here and elsewhere - please prefer sizeof(<expression>) over
>> sizeof(<type>) where possible. Also I continue to be questioning
>
> You mean alloc_struct(sizeof(*mbd)) in this case?
Yes.
>> the myriad of casts you're adding - why can't you use void *,
>> following what the old code did?
>
> Most of mbi, mbi2 and mbd members are u32. So, that is why
> all basic functions use u32 arguments and returns u32. There
> are only two needed casts related to this functions and you can
> see them above.
Patch 3 had quite a few more of them.
>> > +unsigned long __init __init_mbi(u32 mbd_pa)
>> > +{
>> > + mbd_t *mbd = __va(mbd_pa);
>> > +
>> > + enable_exception_support();
>> > +
>> > + if ( mbd->boot_loader_name ) {
>> > + mbi.flags = MBI_LOADERNAME;
>> > + mbi.boot_loader_name = mbd->boot_loader_name;
>> > + }
>> > +
>> > + if ( mbd->cmdline ) {
>> > + mbi.flags |= MBI_CMDLINE;
>> > + mbi.cmdline = mbd->cmdline;
>> > + }
>> > +
>> > + mbi.flags |= MBI_MEMLIMITS;
>> > + mbi.mem_lower = mbd->mem_lower;
>> > + mbi.mem_upper = mbd->mem_upper;
>> > +
>> > + mbi.flags |= MBI_MEMMAP;
>> > + mbi.mmap_length = mbd->mmap_size;
>> > + mbi.mmap_addr = mbd->mmap;
>> > +
>> > + mbi.flags |= MBI_MODULES;
>> > + mbi.mods_count = mbd->mods_nr;
>> > + mbi.mods_addr = mbd->mods;
>> > +
>> > + return __pa(&mbi);
>> > +}
>>
>> You shouldn't be blindly setting these flags - the incoming structure
>> has them, but you discard them in reloc.c instead of propagating
>> them here.
>
> Good point. I think that this should work:
>
> if ( mbd->mem_lower || mbd->mem_upper )
> {
> mbi.flags |= MBI_MEMLIMITS;
> mbi.mem_lower = mbd->mem_lower;
> mbi.mem_upper = mbd->mem_upper;
> }
If it is guaranteed that whatever non-zero field(s) if and only if
original flag set - fine by me. But I guess it would be better if
you forwarded the flags values.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |