Commit d2b35e00 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'fixes' of git://git.armlinux.org.uk/~rmk/linux-arm

Pull ARM fixes from Russell King:
 "A small number of small fixes for ARM, mostly for some build issues.

  One fix for a regression caused by the cpu hotplug conversion from a
  few kernel versions ago"

* 'fixes' of git://git.armlinux.org.uk/~rmk/linux-arm:
  ARM: 8750/1: deflate_xip_data.sh: minor fixes
  ARM: 8748/1: mm: Define vdso_start, vdso_end as array
  ARM: 8747/1: make CONFIG_DEBUG_WX depend on MMU
  ARM: 8746/1: vfp: Go back to clearing vfp_current_hw_state[]
parents fd9adc40 1b8837b6
...@@ -22,6 +22,7 @@ config ARM_PTDUMP_DEBUGFS ...@@ -22,6 +22,7 @@ config ARM_PTDUMP_DEBUGFS
config DEBUG_WX config DEBUG_WX
bool "Warn on W+X mappings at boot" bool "Warn on W+X mappings at boot"
depends on MMU
select ARM_PTDUMP_CORE select ARM_PTDUMP_CORE
---help--- ---help---
Generate a warning if any W+X mappings are found at boot. Generate a warning if any W+X mappings are found at boot.
......
...@@ -30,7 +30,7 @@ esac ...@@ -30,7 +30,7 @@ esac
sym_val() { sym_val() {
# extract hex value for symbol in $1 # extract hex value for symbol in $1
local val=$($NM "$VMLINUX" | sed -n "/ $1$/{s/ .*$//p;q}") local val=$($NM "$VMLINUX" 2>/dev/null | sed -n "/ $1\$/{s/ .*$//p;q}")
[ "$val" ] || { echo "can't find $1 in $VMLINUX" 1>&2; exit 1; } [ "$val" ] || { echo "can't find $1 in $VMLINUX" 1>&2; exit 1; }
# convert from hex to decimal # convert from hex to decimal
echo $((0x$val)) echo $((0x$val))
...@@ -48,12 +48,12 @@ data_end=$(($_edata_loc - $base_offset)) ...@@ -48,12 +48,12 @@ data_end=$(($_edata_loc - $base_offset))
file_end=$(stat -c "%s" "$XIPIMAGE") file_end=$(stat -c "%s" "$XIPIMAGE")
if [ "$file_end" != "$data_end" ]; then if [ "$file_end" != "$data_end" ]; then
printf "end of xipImage doesn't match with _edata_loc (%#x vs %#x)\n" \ printf "end of xipImage doesn't match with _edata_loc (%#x vs %#x)\n" \
$(($file_end + $base_offset)) $_edata_loc 2>&1 $(($file_end + $base_offset)) $_edata_loc 1>&2
exit 1; exit 1;
fi fi
# be ready to clean up # be ready to clean up
trap 'rm -f "$XIPIMAGE.tmp"' 0 1 2 3 trap 'rm -f "$XIPIMAGE.tmp"; exit 1' 1 2 3
# substitute the data section by a compressed version # substitute the data section by a compressed version
$DD if="$XIPIMAGE" count=$data_start iflag=count_bytes of="$XIPIMAGE.tmp" $DD if="$XIPIMAGE" count=$data_start iflag=count_bytes of="$XIPIMAGE.tmp"
......
...@@ -12,8 +12,6 @@ struct mm_struct; ...@@ -12,8 +12,6 @@ struct mm_struct;
void arm_install_vdso(struct mm_struct *mm, unsigned long addr); void arm_install_vdso(struct mm_struct *mm, unsigned long addr);
extern char vdso_start, vdso_end;
extern unsigned int vdso_total_pages; extern unsigned int vdso_total_pages;
#else /* CONFIG_VDSO */ #else /* CONFIG_VDSO */
......
...@@ -39,6 +39,8 @@ ...@@ -39,6 +39,8 @@
static struct page **vdso_text_pagelist; static struct page **vdso_text_pagelist;
extern char vdso_start[], vdso_end[];
/* Total number of pages needed for the data and text portions of the VDSO. */ /* Total number of pages needed for the data and text portions of the VDSO. */
unsigned int vdso_total_pages __ro_after_init; unsigned int vdso_total_pages __ro_after_init;
...@@ -197,13 +199,13 @@ static int __init vdso_init(void) ...@@ -197,13 +199,13 @@ static int __init vdso_init(void)
unsigned int text_pages; unsigned int text_pages;
int i; int i;
if (memcmp(&vdso_start, "\177ELF", 4)) { if (memcmp(vdso_start, "\177ELF", 4)) {
pr_err("VDSO is not a valid ELF object!\n"); pr_err("VDSO is not a valid ELF object!\n");
return -ENOEXEC; return -ENOEXEC;
} }
text_pages = (&vdso_end - &vdso_start) >> PAGE_SHIFT; text_pages = (vdso_end - vdso_start) >> PAGE_SHIFT;
pr_debug("vdso: %i text pages at base %p\n", text_pages, &vdso_start); pr_debug("vdso: %i text pages at base %p\n", text_pages, vdso_start);
/* Allocate the VDSO text pagelist */ /* Allocate the VDSO text pagelist */
vdso_text_pagelist = kcalloc(text_pages, sizeof(struct page *), vdso_text_pagelist = kcalloc(text_pages, sizeof(struct page *),
...@@ -218,7 +220,7 @@ static int __init vdso_init(void) ...@@ -218,7 +220,7 @@ static int __init vdso_init(void)
for (i = 0; i < text_pages; i++) { for (i = 0; i < text_pages; i++) {
struct page *page; struct page *page;
page = virt_to_page(&vdso_start + i * PAGE_SIZE); page = virt_to_page(vdso_start + i * PAGE_SIZE);
vdso_text_pagelist[i] = page; vdso_text_pagelist[i] = page;
} }
...@@ -229,7 +231,7 @@ static int __init vdso_init(void) ...@@ -229,7 +231,7 @@ static int __init vdso_init(void)
cntvct_ok = cntvct_functional(); cntvct_ok = cntvct_functional();
patch_vdso(&vdso_start); patch_vdso(vdso_start);
return 0; return 0;
} }
......
...@@ -648,7 +648,7 @@ int vfp_restore_user_hwstate(struct user_vfp __user *ufp, ...@@ -648,7 +648,7 @@ int vfp_restore_user_hwstate(struct user_vfp __user *ufp,
*/ */
static int vfp_dying_cpu(unsigned int cpu) static int vfp_dying_cpu(unsigned int cpu)
{ {
vfp_force_reload(cpu, current_thread_info()); vfp_current_hw_state[cpu] = NULL;
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment