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

Re: [Xen-devel] [PATCH v6 09/24] xsplice: Implement payload loading



>>> On 11.04.16 at 19:08, <konrad.wilk@xxxxxxxxxx> wrote:
> If the system admin continously tried to unload and load the patchset
> then we certainly would spam.
> 
> But the 'loading' is (or ought to) be a single event. The applying
> or reverting may be done more often.
> 
> As such I would say that the operations that are tied to apply/reverting
> should go through printk - to at least leave breadcrumbs if things
> fall apart. I would say:
> 
>         printk(XENLOG_ERR XSPLICE "%s: unable to get cpu_maps lock!\n",
>         printk(XENLOG_ERR XSPLICE "%s: Timed out on %s semaphore %u/%u\n",
>             printk(XENLOG_ERR XSPLICE "%s: CPU%u - unable to get cpu_maps 
> lock!\n",
>         printk(XENLOG_INFO XSPLICE "%s finished %s with rc=%d\n",
>         printk(XENLOG_INFO XSPLICE ": build-id: %*phN\n", len, binary_id);
>     dprintk(XENLOG_DEBUG, XSPLICE "%s: Applying %u functions.\n",
>     dprintk(XENLOG_DEBUG, XSPLICE "%s: Reverting.\n", data->name);
>     dprintk(XENLOG_DEBUG, XSPLICE "%s: timeout is %"PRI_stime"ms\n",
>             dprintk(XENLOG_DEBUG, XSPLICE "%s: CPU%u - IPIing the other %u 
> CPUs\n",
> 
> Should be come printk. And make them INFO (except on errors - they should be 
> ERR).

Especially for the last one I don't see what use this has outside of
debugging activities. For the others a primary question is: Can any
of these occur more than once for a single operation (hypercall)?

> Then comes the question of payloads loading. In the fields all
> the dprintk are gone - and that is exactly where the payloads would
> be used. And that is the only _way_ to actually test the payload. But
> if you don't have dprintk and something goes wrong you only get -EINVAL.
> 
> As such I would think that all of the dprintk that deal with the payload
> should be made printk. So these:
> 
> +        dprintk(XENLOG_ERR, XSPLICE "%s: Unsupported ELF Machine type!\n",
> +    dprintk(XENLOG_ERR, XSPLICE "%s: SHT_REL relocation unsupported\n",
> +        dprintk(XENLOG_ERR, XSPLICE "%s: Section relative header is 
> corrupted!\n",
> +            dprintk(XENLOG_ERR, XSPLICE "%s: Relative entry %u in %s is past 
> end!\n",
> +            dprintk(XENLOG_ERR, XSPLICE "%s: Relative symbol wants symbol@%u 
> which is past end!\n",
> +            dprintk(XENLOG_ERR, XSPLICE "%s: No WX sections!\n", elf->name);
> +                dprintk(XENLOG_DEBUG, XSPLICE "%s: Loaded %s at 0x%p\n",
> +        dprintk(XENLOG_ERR, XSPLICE "%s: Wrong size of .xsplice.funcs!\n",
> +            dprintk(XENLOG_ERR, XSPLICE "%s: Wrong version (%u). Expected  
> %d!\n",
> +            dprintk(XENLOG_ERR, XSPLICE "%s: Address or size fields are  
> zero!\n",
> +            dprintk(XENLOG_DEBUG, XSPLICE "%s: Resolved old address %s => 
> %p\n",
> +                dprintk(XENLOG_DEBUG, XSPLICE "%s: Already loaded as %s!\n",
> +            dprintk(XENLOG_ERR, XSPLICE "%s: Wrong size of 
> .bug_frames.%u!\n",
> +            dprintk(XENLOG_ERR, XSPLICE "%s: Wrong size of .alt_instr 
> (exp:%lu vs %lu)!\n",
> +                dprintk(XENLOG_ERR, XSPLICE "%s Alt patching outside 
> payload: 0x%lx!\n",
> +            dprintk(XENLOG_ERR, XSPLICE "%s: Wrong size of .ex_table 
> (exp:%lu vs %lu)!\n",
> +            dprintk(XENLOG_DEBUG, XSPLICE "%s: new symbol %s\n",
> +            dprintk(XENLOG_DEBUG, XSPLICE "%s: overriding symbol %s\n",
> +        dprintk(XENLOG_ERR, "%s%s: check against %s build-id failed!\n",
> +                dprintk(XENLOG_ERR, "%s%s: can't unload. Top is %s!\n",
> +            dprintk(XENLOG_ERR, XSPLICE "%s: Section table is past end of 
> payload!\n",
> +            dprintk(XENLOG_ERR, XSPLICE "%s: Section [%u] data is past end 
> of payload!\n",
> +                dprintk(XENLOG_ERR, XSPLICE "%s: Unsupported multiple symbol 
> tables!\n",
> +        dprintk(XENLOG_ERR, XSPLICE "%s: No symbol table found!\n",
> +        dprintk(XENLOG_ERR, XSPLICE "%s: Symbol table header is 
> corrupted!\n",
> +        dprintk(XENLOG_ERR, XSPLICE "%s: String table section is 
> corrupted\n",
> +        dprintk(XENLOG_ERR, XSPLICE "%s: Section string table is 
> corrupted\n",
> +            dprintk(XENLOG_ERR, XSPLICE "%s: shstrtab [%u] data is past end 
> of payload!\n",
> +            dprintk(XENLOG_ERR, XSPLICE "%s: Symbol [%u] data is past end of 
> payload!\n",
> +                dprintk(XENLOG_ERR, XSPLICE "%s: Unknown type=%#"PRIx16"\n",
> +            dprintk(XENLOG_ERR, XSPLICE "%s: Relative link of %s is 
> incorrect (%d, expected=%d)\n",
> +        dprintk(XENLOG_ERR, XSPLICE "%s: Section header is bigger than 
> payload!\n",
> +        dprintk(XENLOG_ERR, XSPLICE "%s: Not an ELF payload!\n", elf->name);
> +        dprintk(XENLOG_ERR, XSPLICE "%s: Invalid ELF payload!\n", elf->name);
> +        dprintk(XENLOG_ERR, XSPLICE "%s: Section name idx is undefined!?\n",
> +        dprintk(XENLOG_ERR, XSPLICE "%s: Section name idx (%u) is past end 
> of sections (%u)!\n",
> +        dprintk(XENLOG_ERR, XSPLICE "%s: Too many (%u) sections!\n",
> +        dprintk(XENLOG_ERR, XSPLICE "%s: Bogus e_shoff!\n", elf->name);
> +        dprintk(XENLOG_ERR, XSPLICE "%s: Section header size is %u! Expected 
> %zu!?\n",
> 
> Should be printk.

I disagree - issues with the payload image should be diagnosed using
user space tools. I.e. I'd rather question whether many of the above
shouldn't go away altogether.

> Which would leave almost no dprintks in the code.
> 
> but some of them are chatty.
> 
>  +                dprintk(XENLOG_DEBUG, XSPLICE "%s: Loaded %s at 0x%p\n",
>  +            dprintk(XENLOG_DEBUG, XSPLICE "%s: Resolved old address %s => 
> %p\n",
>  +            dprintk(XENLOG_DEBUG, XSPLICE "%s: new symbol %s\n",
>  +            dprintk(XENLOG_DEBUG, XSPLICE "%s: overriding symbol %s\n",
>  +                dprintk(XENLOG_DEBUG, XSPLICE "%s: Symbol resolved: %s => 
> %#"PRIxElfAddr"(%s)\n",
> +            dprintk(XENLOG_DEBUG, XSPLICE "%s: Undefined symbol resolved: %s 
> => %#"PRIxElfAddr"\n",
> +            dprintk(XENLOG_DEBUG, XSPLICE "%s: Absolute symbol: %s => 
> %#"PRIxElfAddr"\n",
> 
> and those could certainly be printk(XENLOG_DEBUG' perhaps? Or leave them as 
> dprintk?

Afaic - leave as many dprintk() as possible.

Jan

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel

 


Rackspace

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