lkml.org 
[lkml]   [2009]   [Nov]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3/5] x86, pageattr: make set_memory_(x|nx) aware of NX support
    Date
    Make set_memory_x/set_memory_nx directly aware of if NX is supported
    in the system or not, rather than requiring that every caller assesses
    that support independently.

    Signed-off-by: H. Peter Anvin <hpa@zytor.com>
    Cc: Huang Ying <ying.huang@intel.com>
    Cc: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
    Cc: Suresh Siddha <suresh.b.siddha@intel.com>
    Cc: Tejun Heo <tj@kernel.org>
    Cc: Tim Starling <tstarling@wikimedia.org>
    Cc: Hannes Eder <hannes@hanneseder.net>
    ---
    arch/x86/kernel/machine_kexec_32.c | 6 ++----
    arch/x86/mm/pageattr.c | 6 ++++++
    2 files changed, 8 insertions(+), 4 deletions(-)

    diff --git a/arch/x86/kernel/machine_kexec_32.c b/arch/x86/kernel/machine_kexec_32.c
    index c1c429d..03657e7 100644
    --- a/arch/x86/kernel/machine_kexec_32.c
    +++ b/arch/x86/kernel/machine_kexec_32.c
    @@ -157,8 +157,7 @@ int machine_kexec_prepare(struct kimage *image)
    {
    int error;

    - if (nx_enabled)
    - set_pages_x(image->control_code_page, 1);
    + set_pages_x(image->control_code_page, 1);
    error = machine_kexec_alloc_page_tables(image);
    if (error)
    return error;
    @@ -172,8 +171,7 @@ int machine_kexec_prepare(struct kimage *image)
    */
    void machine_kexec_cleanup(struct kimage *image)
    {
    - if (nx_enabled)
    - set_pages_nx(image->control_code_page, 1);
    + set_pages_nx(image->control_code_page, 1);
    machine_kexec_free_page_tables(image);
    }

    diff --git a/arch/x86/mm/pageattr.c b/arch/x86/mm/pageattr.c
    index dd38bfb..442b8ac 100644
    --- a/arch/x86/mm/pageattr.c
    +++ b/arch/x86/mm/pageattr.c
    @@ -1069,12 +1069,18 @@ EXPORT_SYMBOL(set_memory_array_wb);

    int set_memory_x(unsigned long addr, int numpages)
    {
    + if (!(__supported_pte_mask & _PAGE_NX))
    + return 0;
    +
    return change_page_attr_clear(&addr, numpages, __pgprot(_PAGE_NX), 0);
    }
    EXPORT_SYMBOL(set_memory_x);

    int set_memory_nx(unsigned long addr, int numpages)
    {
    + if (!(__supported_pte_mask & _PAGE_NX))
    + return 0;
    +
    return change_page_attr_set(&addr, numpages, __pgprot(_PAGE_NX), 0);
    }
    EXPORT_SYMBOL(set_memory_nx);
    --
    1.6.2.5


    \
     
     \ /
      Last update: 2009-11-14 00:33    [W:0.024 / U:177.408 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site