x86 mpx: give bndX registers actual names
PATCH v2 1/1 x86 mpx: give bndX registers actual names
Changes from V1:
* name it 'bndreg' instead plain 'bnd'
--
From: Dave Hansen <[email protected]>
Consider the bndX MPX registers. There 4 registers each containing a 64-bit lower and a 64-bit upper bound. That's 8*64 bits and we declare it thusly:
struct bndregs_struct {
u64 bndregs[8];
}Let's say you want to read the upper bound from the MPX register bnd2 out of the xsave buf. You do:
bndregno = 2; upper_bound = xsave_buf->bndregs.bndregs[2*bndregno+1];
That kinda sucks. Every time you access it, you need to know:
1. Each bndX register is two entries wide in "bndregs"
2. The lower comes first followed by upper. We do the +1 to get upper vs. lower.
This replaces the old definition. You can now access them indexed by the register number directly, and with a meaningful name for the lower and upper bound:
bndregno = 2; xsave_buf->bndreg[bndregno].ub;
It's now *VERY* clear that there are 4 registers. The programmer now doesn't have to care what order the lower and upper bounds are in, and it's harder to get it wrong.
The naming "lb" and "ub" reflects the names found in the Intel SDM Extensions documentation of these registers. I'm not married to it.
---
b/arch/x86/include/asm/processor.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
arch/x86/include/asm/processor.h renamed from arch/x86/include/asm/processor.h~mpx-give-regsters-real-names +4 -3
@@ -374,8 +374,9 @@ struct lwp_struct {u8 reserved[128 ]; }; -struct bndregs_struct { -u64 bndregs[8 ]; +struct bndreg_struct { +u64 lb;/* lower bound */ +u64 ub;/* upper bound */ } __packed;struct bndcsr_struct {
@@ -394,7 +395,7 @@ struct xsave_struct {struct xsave_hdr_struct xsave_hdr;struct ymmh_struct ymmh;struct lwp_struct lwp; -struct bndregs_struct bndregs; +struct bndreg_struct bndreg[4 ];struct bndcsr_struct bndcsr;/* new processor state extensions will go here */ } __attribute__ ((packed, aligned (64)));
_
Quoted 3 lines · Dave Hansen
Changes from V1:
* name it 'bndreg' instead plain 'bnd'
Peter wanted you to do s/struct bndreg_struct/struct bndreg/
Which makes a lot of sense as there is no point of having the extra _struct. Except you are part of the
bndreg_struct_t *ptrStructBndregStruct_p;
universe :)
Thanks,
tglx
tip-bot for Dave Hansen
merge bot[tip:x86/mpx] x86: mpx: Give bndX registers actual names
In reply to Dave Hansenx86: mpx: Give bndX registers actual names
Commit-ID: c04e051cccd2446d9ca373628d14b7e732462f5d Gitweb: http://git.kernel.org/tip/c04e051cccd2446d9ca373628d14b7e732462f5d Author: Dave Hansen <[email protected]> AuthorDate: Fri, 31 Oct 2014 14:58:20 -0700 Committer: Thomas Gleixner <[email protected]> CommitDate: Tue, 18 Nov 2014 00:58:52 +0100
x86: mpx: Give bndX registers actual names
Consider the bndX MPX registers. There 4 registers each containing a 64-bit lower and a 64-bit upper bound. That's 8*64 bits and we declare it thusly:
struct bndregs_struct {
u64 bndregs[8];
}Let's say you want to read the upper bound from the MPX register bnd2 out of the xsave buf. You do:
bndregno = 2; upper_bound = xsave_buf->bndregs.bndregs[2*bndregno+1];
That kinda sucks. Every time you access it, you need to know:
1. Each bndX register is two entries wide in "bndregs"
2. The lower comes first followed by upper. We do the +1 to get upper vs. lower.
This replaces the old definition. You can now access them indexed by the register number directly, and with a meaningful name for the lower and upper bound:
bndregno = 2; xsave_buf->bndreg[bndregno].upper_bound;
It's now *VERY* clear that there are 4 registers. The programmer now doesn't have to care what order the lower and upper bounds are in, and it's harder to get it wrong.
[ tglx: Changed ub/lb to upper_bound/lower_bound and renamed struct bndreg_struct to struct bndreg ]
--- arch/x86/include/asm/processor.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
arch/x86/include/asm/processor.h +4 -3
@@ -374,8 +374,9 @@ struct lwp_struct {u8 reserved[128 ]; }; -struct bndregs_struct { -u64 bndregs[8 ]; +struct bndreg { +u64 lower_bound; +u64 upper_bound; } __packed;struct bndcsr_struct {
@@ -394,7 +395,7 @@ struct xsave_struct {struct xsave_hdr_struct xsave_hdr;struct ymmh_struct ymmh;struct lwp_struct lwp; -struct bndregs_struct bndregs; +struct bndreg bndreg[4 ];struct bndcsr_struct bndcsr;/* new processor state extensions will go here */ } __attribute__ ((packed, aligned (64)));