[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 06/10] x86: Introduce a new function to get capability of Intel PT
> >> > +#define IPT_CAP(_n, _l, _r, _m) \ > >> > + [IPT_CAP_ ## _n] = { .name = __stringify(_n), .leaf = _l, \ > >> > + .reg = _r, .mask = _m } > >> > + > >> > +static struct ipt_cap_desc { > >> > + const char *name; > >> > + unsigned int leaf; > >> > + unsigned char reg; > >> > >> I don't think leaf needs to be full 32 bits wide? Once shrunk by at > >> least two bits, the size of the overall structure could go down from 24 to > >> 16 bytes. > > > > OK, will change it from " unsigned int " to "unsinged char". > > I'd prefer if you used bit fields, as was meant to be implied by my reply. like this? If two bits is too few for "leaf"? static const struct ipt_cap_desc { const char *name; unsigned char leaf:2; unsigned char reg:2; unsinged int mask; } > > >> > +static unsigned int ipt_cap(const struct cpuid_leaf *cpuid_ipt, > >> > +enum ipt_cap cap) { > >> > + const struct ipt_cap_desc *cd = &ipt_caps[cap]; > >> > + unsigned int shift = ffs(cd->mask) - 1; > >> > >> Do you really need this? > >> > >> > + unsigned int val = 0; > >> > + > >> > + cpuid_ipt += cd->leaf; > >> > + > >> > + switch ( cd->reg ) > >> > + { > >> > + case EAX: > >> > + val = cpuid_ipt->a; > >> > + break; > >> > + case EBX: > >> > + val = cpuid_ipt->b; > >> > + break; > >> > + case ECX: > >> > + val = cpuid_ipt->c; > >> > + break; > >> > + case EDX: > >> > + val = cpuid_ipt->d; > >> > + break; > >> > + } > >> > + > >> > + return (val & cd->mask) >> shift; > >> > >> If all masks are indeed contiguous series of set bits, MASK_EXTR() > >> can be > > used here afaict. > > > > Yes, it is a good define to me. Will fix it. > > > >> > >> > +} > >> > + > >> > static int __init parse_ipt_params(const char *str) { > >> > if ( !strcmp("guest", str) ) > >> > >> So this is the end of the changes to this file, and the function you > >> introduce is static. I'm pretty sure compilers will warn about the > >> unused static, and hence the build will fail at this point of the series > >> (due to -Werror). I think you want to introduce the function > together with its first user. > > > > I can't reproduce this issue by: > > #./configure > > # make build-xen (-Werror has been included during build) > > Could you tell me how to? > > There is certainly the possibility that gcc versions differ in this regard. > But I'm sure it's clear to you that the code should build fine with all > supported versions. There's also the possibility that I'm > overlooking something. Get it. Will test it. Thanks, Luwei Kang _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |