[PATCHv2] x86: Use v8086_mode helper, trivial unification - Kernel

This is a discussion on [PATCHv2] x86: Use v8086_mode helper, trivial unification - Kernel ; Use v8086_mode inline in fault_32.c, no functional change also ifdef the section for 32-bit only and add to fault_64.c Signed-off-by: Harvey Harrison --- HPA noted that v8086_mode is always zero on X86_64, no ifdef needed. arch/x86/mm/fault_32.c | 3 ++- arch/x86/mm/fault_64.c ...

+ Reply to Thread
Results 1 to 6 of 6

Thread: [PATCHv2] x86: Use v8086_mode helper, trivial unification

  1. [PATCHv2] x86: Use v8086_mode helper, trivial unification

    Use v8086_mode inline in fault_32.c, no functional change
    also ifdef the section for 32-bit only and add to fault_64.c

    Signed-off-by: Harvey Harrison
    ---
    HPA noted that v8086_mode is always zero on X86_64, no ifdef
    needed.

    arch/x86/mm/fault_32.c | 3 ++-
    arch/x86/mm/fault_64.c | 10 ++++++++++
    2 files changed, 12 insertions(+), 1 deletions(-)

    diff --git a/arch/x86/mm/fault_32.c b/arch/x86/mm/fault_32.c
    index 77915ac..53f4fe4 100644
    --- a/arch/x86/mm/fault_32.c
    +++ b/arch/x86/mm/fault_32.c
    @@ -550,11 +550,12 @@ good_area:
    /*
    * Did it hit the DOS screen memory VA from vm86 mode?
    */
    - if (regs->flags & VM_MASK) {
    + if (v8086_mode(regs)) {
    unsigned long bit = (address - 0xA0000) >> PAGE_SHIFT;
    if (bit < 32)
    tsk->thread.screen_bitmap |= 1 << bit;
    }
    +
    up_read(&mm->mmap_sem);
    return;

    diff --git a/arch/x86/mm/fault_64.c b/arch/x86/mm/fault_64.c
    index 84531d8..c05211d 100644
    --- a/arch/x86/mm/fault_64.c
    +++ b/arch/x86/mm/fault_64.c
    @@ -551,6 +551,16 @@ good_area:
    tsk->maj_flt++;
    else
    tsk->min_flt++;
    +
    + /*
    + * Did it hit the DOS screen memory VA from vm86 mode?
    + */
    + if (v8086_mode(regs)) {
    + unsigned long bit = (address - 0xA0000) >> PAGE_SHIFT;
    + if (bit < 32)
    + tsk->thread.screen_bitmap |= 1 << bit;
    + }
    +
    up_read(&mm->mmap_sem);
    return;

    --
    1.5.4.rc2.1164.g6451



    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

  2. Re: [PATCHv2] x86: Use v8086_mode helper, trivial unification


    * Harvey Harrison wrote:

    > Use v8086_mode inline in fault_32.c, no functional change also ifdef
    > the section for 32-bit only and add to fault_64.c


    > - if (regs->flags & VM_MASK) {
    > + if (v8086_mode(regs)) {


    > --- a/arch/x86/mm/fault_64.c
    > +++ b/arch/x86/mm/fault_64.c
    > @@ -551,6 +551,16 @@ good_area:
    > tsk->maj_flt++;
    > else
    > tsk->min_flt++;
    > +
    > + /*
    > + * Did it hit the DOS screen memory VA from vm86 mode?
    > + */
    > + if (v8086_mode(regs)) {
    > + unsigned long bit = (address - 0xA0000) >> PAGE_SHIFT;
    > + if (bit < 32)
    > + tsk->thread.screen_bitmap |= 1 << bit;
    > + }


    hm, is there even vm86 mode in 64-bit? Anyway, gcc will eliminate it i
    guess. I've applied your patch.

    Ingo
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

  3. Re: [PATCHv2] x86: Use v8086_mode helper, trivial unification

    On Fri, 2008-01-18 at 10:12 +0100, Ingo Molnar wrote:
    > * Harvey Harrison wrote:
    >
    > > Use v8086_mode inline in fault_32.c, no functional change also ifdef
    > > the section for 32-bit only and add to fault_64.c

    >
    > > - if (regs->flags & VM_MASK) {
    > > + if (v8086_mode(regs)) {

    >
    > > --- a/arch/x86/mm/fault_64.c
    > > +++ b/arch/x86/mm/fault_64.c
    > > @@ -551,6 +551,16 @@ good_area:
    > > tsk->maj_flt++;
    > > else
    > > tsk->min_flt++;
    > > +
    > > + /*
    > > + * Did it hit the DOS screen memory VA from vm86 mode?
    > > + */
    > > + if (v8086_mode(regs)) {
    > > + unsigned long bit = (address - 0xA0000) >> PAGE_SHIFT;
    > > + if (bit < 32)
    > > + tsk->thread.screen_bitmap |= 1 << bit;
    > > + }

    >
    > hm, is there even vm86 mode in 64-bit? Anyway, gcc will eliminate it i
    > guess. I've applied your patch.
    >


    No, it doesn't mean anything to 64-bit, but helps make the diff a little
    bit smaller, getting pretty close now.

    Still needs a bit of work to introduce oops_begin/end from 64-bit to
    32-bit in traps_32.c and introduce a bad_pgtable-like function to
    32bit, then we're down to small differences between 32/64 bit
    do_page_fault and vmalloc_sync_all that should be relatively clean
    to harmonize.

    Got distracted with the ptrace stuff today, but patch coming soon.

    Harvey

    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

  4. Re: [PATCHv2] x86: Use v8086_mode helper, trivial unification


    > > + /*
    > > + * Did it hit the DOS screen memory VA from vm86 mode?
    > > + */
    > > + if (v8086_mode(regs)) {
    > > + unsigned long bit = (address - 0xA0000) >> PAGE_SHIFT;
    > > + if (bit < 32)
    > > + tsk->thread.screen_bitmap |= 1 << bit;
    > > + }


    this does not build on 64-bit, because screen_bitmap is 32-bit only - so
    i had to pull the patch. I suspect a small #ifdef section would look
    better here?

    Ingo
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

  5. Re: [PATCHv2] x86: Use v8086_mode helper, trivial unification

    On Fri, 2008-01-18 at 16:00 +0100, Ingo Molnar wrote:
    > > > + /*
    > > > + * Did it hit the DOS screen memory VA from vm86 mode?
    > > > + */
    > > > + if (v8086_mode(regs)) {
    > > > + unsigned long bit = (address - 0xA0000) >> PAGE_SHIFT;
    > > > + if (bit < 32)
    > > > + tsk->thread.screen_bitmap |= 1 << bit;
    > > > + }

    >
    > this does not build on 64-bit, because screen_bitmap is 32-bit only - so
    > i had to pull the patch. I suspect a small #ifdef section would look
    > better here?
    >


    My original patch had the ifdef, you can grab that one.

    Harvey

    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

  6. Re: [PATCHv2] x86: Use v8086_mode helper, trivial unification

    Harvey Harrison wrote:
    > On Fri, 2008-01-18 at 16:00 +0100, Ingo Molnar wrote:
    >>>> + /*
    >>>> + * Did it hit the DOS screen memory VA from vm86 mode?
    >>>> + */
    >>>> + if (v8086_mode(regs)) {
    >>>> + unsigned long bit = (address - 0xA0000) >> PAGE_SHIFT;
    >>>> + if (bit < 32)
    >>>> + tsk->thread.screen_bitmap |= 1 << bit;
    >>>> + }

    >> this does not build on 64-bit, because screen_bitmap is 32-bit only - so
    >> i had to pull the patch. I suspect a small #ifdef section would look
    >> better here?
    >>

    >
    > My original patch had the ifdef, you can grab that one.
    >


    Me bad, I should have been less definite in my reply.

    -hpa
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

+ Reply to Thread