On Wed, Mar 25, 2020 at 10:20:43PM +0100, Auger Eric wrote: > Hi Zenghui, > > On 3/25/20 9:10 AM, Zenghui Yu wrote: > > Hi Eric, > > > > On 2020/3/20 17:24, Eric Auger wrote: > >> Introduce an helper functions to register > >> - a new device, characterized by its device id and the > >> max number of event IDs that dimension its ITT (Interrupt > >> Translation Table). The function allocates the ITT. > >> > >> - a new collection, characterized by its ID and the > >> target processing engine (PE). > >> > >> Signed-off-by: Eric Auger <eric.auger@xxxxxxxxxx> > >> > >> --- > >> > >> v3 -> v4: > >> - remove unused its_baser variable from its_create_device() > >> - use get_order() > >> - device->itt becomes a GVA instead of GPA > >> > >> v2 -> v3: > >> - s/report_abort/assert > >> > >> v1 -> v2: > >> - s/nb_/nr_ > >> --- > >> lib/arm64/asm/gic-v3-its.h | 19 +++++++++++++++++++ > >> lib/arm64/gic-v3-its.c | 38 ++++++++++++++++++++++++++++++++++++++ > >> 2 files changed, 57 insertions(+) > >> > >> diff --git a/lib/arm64/asm/gic-v3-its.h b/lib/arm64/asm/gic-v3-its.h > >> index 4683011..adcb642 100644 > >> --- a/lib/arm64/asm/gic-v3-its.h > >> +++ b/lib/arm64/asm/gic-v3-its.h > >> @@ -31,6 +31,19 @@ struct its_baser { > >> }; > >> #define GITS_BASER_NR_REGS 8 > >> +#define GITS_MAX_DEVICES 8 > >> +#define GITS_MAX_COLLECTIONS 8 > >> + > >> +struct its_device { > >> + u32 device_id; /* device ID */ > >> + u32 nr_ites; /* Max Interrupt Translation Entries */ > >> + void *itt; /* Interrupt Translation Table GVA */ > >> +}; > >> + > >> +struct its_collection { > >> + u64 target_address; > >> + u16 col_id; > >> +}; > >> struct its_data { > >> void *base; > >> @@ -39,6 +52,10 @@ struct its_data { > >> struct its_baser coll_baser; > >> struct its_cmd_block *cmd_base; > >> struct its_cmd_block *cmd_write; > >> + struct its_device devices[GITS_MAX_DEVICES]; > >> + u32 nr_devices; /* Allocated Devices */ > >> + struct its_collection collections[GITS_MAX_COLLECTIONS]; > >> + u32 nr_collections; /* Allocated Collections */ > >> }; > >> extern struct its_data its_data; > >> @@ -93,5 +110,7 @@ extern void its_parse_typer(void); > >> extern void its_init(void); > >> extern int its_baser_lookup(int i, struct its_baser *baser); > >> extern void its_enable_defaults(void); > >> +extern struct its_device *its_create_device(u32 dev_id, int nr_ites); > >> +extern struct its_collection *its_create_collection(u32 col_id, u32 > >> target_pe); > > > > Maybe use 'u16 col_id'? > fair enough. At this point, not sure this is worth a respin though ;-) I'd like all the virt_to_phys calls removed where there are not necessary, which was pointed out in a different patch. This can be fixed up at the same time. Thanks, drew > > > > Besides, > > Reviewed-by: Zenghui Yu <yuzenghui@xxxxxxxxxx> > Thanks! > > Eric > > > > > > > > > > Thanks > > > > > > _______________________________________________ kvmarm mailing list kvmarm@xxxxxxxxxxxxxxxxxxxxx https://lists.cs.columbia.edu/mailman/listinfo/kvmarm