On 06/18/2014 11:53 PM, Ren, Qiaowei wrote: > On 2014-06-19, Borislav Petkov wrote: >> On Thu, Jun 19, 2014 at 01:13:48AM +0000, Ren, Qiaowei wrote: >>> On 2014-06-18, Borislav Petkov wrote: >>>> On Wed, Jun 18, 2014 at 05:44:13PM +0800, Qiaowei Ren wrote: >>>> >>>> This whole insn decoding machinery above looks like adapted from >>>> arch/x86/lib/insn.c. You should merge it with the generic code in >>>> insn.c instead of homegrowing it here only for the purposes of MPX. >>>> And if it doesn't work for your needs, you should should extend >>>> the generic code to do so. >> >>> Petkov, as we discussed on initial version of this patchset, general >>> insn framework didn't work out well and I have tried to use generic >>> struct insn, insn_field, etc. for obvious benefits. >> >> Let me repeat myself: "And if it doesn't work for your needs, you >> should extend the generic code to do so." >> >> We don't do homegrown almost-copies of generic code. >> > I see. If possible, I will be very happy to use or extend generic > code. But due to extra overhead caused by MPX, I have to use MPX > specific decoding to do performance optimization. Could you please support this position with some data? I'm a bit skeptical that instruction decoding is going to be a performance-critical path. I also don't see the extra field that you talked about in the previous thread? What's the extra field? I see a 'limit' vs. 'length', but you don't use 'length' at all, so I think you can use it instead, or at least union it. I've taken a quick stab at trying to consolidate things. I think I may have screwed up this: insn->limit = MAX_MPX_INSN_SIZE - bytes; Qiaowei, is there anything fundamentally broken with what I've got here?