[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: [PATCH v7 08/11] IOMMU/VT-d: wire common device reserved memory API
> From: Marczykowski, Marek <marmarek@xxxxxxxxxxxxxxxxxxxxxx> > Sent: Tuesday, September 27, 2022 7:54 AM > > On Fri, Sep 23, 2022 at 07:21:04AM +0000, Tian, Kevin wrote: > > > From: Marek Marczykowski-Górecki > > > Sent: Saturday, September 17, 2022 10:51 AM > > > > > > Re-use rmrr= parameter handling code to handle common device > reserved > > > memory. > > > > > > Signed-off-by: Marek Marczykowski-Górecki > > > <marmarek@xxxxxxxxxxxxxxxxxxxxxx> > > > --- > > > Changes in v3: > > > - make MAX_USER_RMRR_PAGES applicable only to user-configured > RMRR > > > --- > > > xen/drivers/passthrough/vtd/dmar.c | 201 +++++++++++++++++------------ > - > > > 1 file changed, 119 insertions(+), 82 deletions(-) > > > > > > diff --git a/xen/drivers/passthrough/vtd/dmar.c > > > b/xen/drivers/passthrough/vtd/dmar.c > > > index 367304c8739c..3df5f6b69719 100644 > > > --- a/xen/drivers/passthrough/vtd/dmar.c > > > +++ b/xen/drivers/passthrough/vtd/dmar.c > > > @@ -861,111 +861,139 @@ static struct user_rmrr __initdata > > > user_rmrrs[MAX_USER_RMRR]; > > > > > > /* Macro for RMRR inclusive range formatting. */ > > > #define ERMRRU_FMT "[%lx-%lx]" > > > -#define ERMRRU_ARG(eru) eru.base_pfn, eru.end_pfn > > > +#define ERMRRU_ARG base_pfn, end_pfn > > > + > > > +static int __init add_one_user_rmrr(unsigned long base_pfn, > > > + unsigned long end_pfn, > > > + unsigned int dev_count, > > > + uint32_t *sbdf); > > > > Just move the function here then no need of a declaration. > > Ok. > > > > > > > static int __init add_user_rmrr(void) > > > { > > > + unsigned int i; > > > + int ret; > > > + > > > + for ( i = 0; i < nr_rmrr; i++ ) > > > + { > > > + ret = add_one_user_rmrr(user_rmrrs[i].base_pfn, > > > + user_rmrrs[i].end_pfn, > > > + user_rmrrs[i].dev_count, > > > + user_rmrrs[i].sbdf); > > > + if ( ret < 0 ) > > > + return ret; > > > + } > > > + return 0; > > > +} > > > + > > > +/* Returns 1 on success, 0 when ignoring and < 0 on error. */ > > > > I'm not sure the point of 'ignoring'. If user specifies a wrong RMRR > > range (overlap, mfn invalid, etc.) just return an error similar to > > -ENOMEM. Ignoring a user-specified range implies that something > > would potentially get broken hence better fail it early. > > That's the behaviour that was here before, I simply added a comment > about it explicitly (previously it used 'continue' heavily, now it's a > separate function so it's a return value). > While I agree in principle, I don't think such change should be part of > this patch. > > (...) > > > > @@ -1108,6 +1136,15 @@ static int __init cf_check > parse_rmrr_param(const > > > char *str) > > > else > > > end = start; > > > > > > + if ( (end - start) >= MAX_USER_RMRR_PAGES ) > > > + { > > > + printk(XENLOG_ERR VTDPREFIX > > > + "RMRR range "ERMRRU_FMT" exceeds "\ > > > + __stringify(MAX_USER_RMRR_PAGES)" pages\n", > > > + start, end); > > > + return -E2BIG; > > > + } > > > + > > > > why moving this error check out of add_one_user_rmrr()? I didn't > > get why it's special from other checks there, e.g. having base>end... > > To allow internal callers bypass MAX_USER_RMRR_PAGES, and make it apply > really only to user-provided ranges. > With above clarification and order adjustment, Reviewed-by: Kevin Tian <kevin.tian@xxxxxxxxx>
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |