[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v5 03/28] arm/x86: Use struct virtual_region to do bug, symbol, and (x86) exception tables lookup.
>>> On 24.03.16 at 21:00, <konrad.wilk@xxxxxxxxxx> wrote: > @@ -1077,27 +1080,33 @@ void do_unexpected_trap(const char *msg, struct > cpu_user_regs *regs) > > int do_bug_frame(struct cpu_user_regs *regs, vaddr_t pc) > { > - const struct bug_frame *bug; > + const struct bug_frame *bug = NULL; > const char *prefix = "", *filename, *predicate; > unsigned long fixup; > - int id, lineno; > - static const struct bug_frame *const stop_frames[] = { > - __stop_bug_frames_0, > - __stop_bug_frames_1, > - __stop_bug_frames_2, > - NULL > - }; > + int id = -1, lineno; > + struct virtual_region *region; > > - for ( bug = __start_bug_frames, id = 0; stop_frames[id]; ++bug ) > + region = search_for_text(pc); find_text_region() maybe? And "virtual_region" then perhaps could also become "text_region"? > --- /dev/null > +++ b/xen/common/virtual_region.c > @@ -0,0 +1,160 @@ > +/* > + * Copyright (c) 2016 Oracle and/or its affiliates. All rights reserved. > + * > + */ > + > +#include <xen/init.h> > +#include <xen/kernel.h> > +#include <xen/rcupdate.h> > +#include <xen/spinlock.h> > +#include <xen/virtual_region.h> > + > +#ifdef CONFIG_X86 > +#include <asm/uaccess.h> > +#endif I can't spot what code below needs this. > +static struct virtual_region core = { > + .list = LIST_HEAD_INIT(core.list), > + .start = (unsigned long)_stext, > + .end = (unsigned long)_etext, > +#ifdef CONFIG_X86 > + .ex = (struct exception_table_entry *)__start___ex_table, > + .ex_end = (struct exception_table_entry *)__stop___ex_table, > +#endif And I continue to be unhappy about these #ifdef-s, the more that I think that ARM is more the exception than the norm in not needing these tables. Couldn't the arch pass the two pointers to setup_virtual_regions() instead? > +struct virtual_region* search_for_text(unsigned long addr) I think I had said before that this should return a pointer to const. And the * also is still misplaced. > +{ > + struct virtual_region *region; > + > + rcu_read_lock(&rcu_virtual_region_lock); > + > + list_for_each_entry_rcu( region, &virtual_region_list, list ) Inconsistent style: Either you need another blank ahead of the opening paren, or you don't need any immediately inside. > +int register_virtual_region(struct virtual_region *r) > +{ > + ASSERT(!local_irq_is_enabled()); > + > + list_add_tail_rcu(&r->list, &virtual_region_list); > + > + return 0; > +} Is it really useful for this function to return non-void? > --- /dev/null > +++ b/xen/include/xen/virtual_region.h > @@ -0,0 +1,48 @@ > +/* > + * Copyright (c) 2016 Oracle and/or its affiliates. All rights reserved. > + * > + */ > + > +#ifndef __XEN_VIRTUAL_REGION_LIST__ > +#define __XEN_VIRTUAL_REGION_LIST__ Still inconsistent with the header's name. > +struct virtual_region > +{ > + struct list_head list; > + unsigned long start; /* Virtual address start. */ > + unsigned long end; /* Virtual address start. */ > + > + /* > + * If this is NULL the default lookup mechanism is used. > + */ Still wrongly a multi line comment. > + symbols_lookup_t *symbols_lookup; > + > + struct { > + const struct bug_frame *bugs; /* The pointer to array of bug frames. > */ > + ssize_t n_bugs; /* The number of them. */ > + } frame[BUGFRAME_NR]; > + > + struct exception_table_entry *ex; > + struct exception_table_entry *ex_end; So you nicely constified "bugs", but what about these two? Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |