Commit 8aa9c367 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'parisc-3.13' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux

Pull parsic updates from Helge Deller:
 - a fix for the mmap(MAP_FIXED|MAP_SHARED) syscall to the same address
   which was already given in a previous call (fixes locale-gen on
   debian)
 - change the memory layout of the kernel to avoid the need for the
   -mlong-calls compiler option (depends on commit 5ecbe3c3 -
   "kernel/extable: fix address-checks for core_kernel and init areas")
 - defconfig updates, e.g.  use the SIL680 driver instead of the SIIMAGE
   driver
 - add more parisc machine names to the machine database

* 'parisc-3.13' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux:
  parisc: update 64bit defconfigs and use SIL680 instead of SIIMAGE driver
  parisc: remove CONFIG_MLONGCALLS=y from defconfigs
  parisc: fix kernel memory layout in vmlinux.ld.S
  parisc: use kernel_text_address() in unwind functions
  parisc: remove empty SERIAL_PORT_DFNS in serial.h
  parisc: add some more machine names to hardware database
  parisc: fix mmap(MAP_FIXED|MAP_SHARED) to already mmapped address
parents 27871790 a16ab68e
...@@ -50,7 +50,7 @@ CONFIG_BLK_DEV_CRYPTOLOOP=m ...@@ -50,7 +50,7 @@ CONFIG_BLK_DEV_CRYPTOLOOP=m
CONFIG_IDE=y CONFIG_IDE=y
CONFIG_BLK_DEV_IDECD=y CONFIG_BLK_DEV_IDECD=y
CONFIG_BLK_DEV_NS87415=y CONFIG_BLK_DEV_NS87415=y
CONFIG_BLK_DEV_SIIMAGE=m CONFIG_PATA_SIL680=m
CONFIG_SCSI=y CONFIG_SCSI=y
CONFIG_BLK_DEV_SD=y CONFIG_BLK_DEV_SD=y
CONFIG_CHR_DEV_ST=y CONFIG_CHR_DEV_ST=y
......
...@@ -20,7 +20,6 @@ CONFIG_MODULE_FORCE_UNLOAD=y ...@@ -20,7 +20,6 @@ CONFIG_MODULE_FORCE_UNLOAD=y
CONFIG_MODVERSIONS=y CONFIG_MODVERSIONS=y
CONFIG_BLK_DEV_INTEGRITY=y CONFIG_BLK_DEV_INTEGRITY=y
CONFIG_PA8X00=y CONFIG_PA8X00=y
CONFIG_MLONGCALLS=y
CONFIG_64BIT=y CONFIG_64BIT=y
CONFIG_SMP=y CONFIG_SMP=y
CONFIG_PREEMPT=y CONFIG_PREEMPT=y
...@@ -81,8 +80,6 @@ CONFIG_IDE=y ...@@ -81,8 +80,6 @@ CONFIG_IDE=y
CONFIG_BLK_DEV_IDECD=y CONFIG_BLK_DEV_IDECD=y
CONFIG_BLK_DEV_PLATFORM=y CONFIG_BLK_DEV_PLATFORM=y
CONFIG_BLK_DEV_GENERIC=y CONFIG_BLK_DEV_GENERIC=y
CONFIG_BLK_DEV_SIIMAGE=y
CONFIG_SCSI=y
CONFIG_BLK_DEV_SD=y CONFIG_BLK_DEV_SD=y
CONFIG_CHR_DEV_ST=m CONFIG_CHR_DEV_ST=m
CONFIG_BLK_DEV_SR=m CONFIG_BLK_DEV_SR=m
...@@ -94,6 +91,8 @@ CONFIG_SCSI_FC_ATTRS=y ...@@ -94,6 +91,8 @@ CONFIG_SCSI_FC_ATTRS=y
CONFIG_SCSI_SAS_LIBSAS=m CONFIG_SCSI_SAS_LIBSAS=m
CONFIG_ISCSI_TCP=m CONFIG_ISCSI_TCP=m
CONFIG_ISCSI_BOOT_SYSFS=m CONFIG_ISCSI_BOOT_SYSFS=m
CONFIG_ATA=y
CONFIG_PATA_SIL680=y
CONFIG_FUSION=y CONFIG_FUSION=y
CONFIG_FUSION_SPI=y CONFIG_FUSION_SPI=y
CONFIG_FUSION_SAS=y CONFIG_FUSION_SAS=y
...@@ -114,9 +113,8 @@ CONFIG_INPUT_FF_MEMLESS=m ...@@ -114,9 +113,8 @@ CONFIG_INPUT_FF_MEMLESS=m
# CONFIG_KEYBOARD_ATKBD is not set # CONFIG_KEYBOARD_ATKBD is not set
# CONFIG_KEYBOARD_HIL_OLD is not set # CONFIG_KEYBOARD_HIL_OLD is not set
# CONFIG_KEYBOARD_HIL is not set # CONFIG_KEYBOARD_HIL is not set
CONFIG_MOUSE_PS2=m # CONFIG_MOUSE_PS2 is not set
CONFIG_INPUT_MISC=y CONFIG_INPUT_MISC=y
CONFIG_INPUT_CM109=m
CONFIG_SERIO_SERPORT=m CONFIG_SERIO_SERPORT=m
CONFIG_SERIO_PARKBD=m CONFIG_SERIO_PARKBD=m
CONFIG_SERIO_GSCPS2=m CONFIG_SERIO_GSCPS2=m
...@@ -167,34 +165,6 @@ CONFIG_SND_VERBOSE_PRINTK=y ...@@ -167,34 +165,6 @@ CONFIG_SND_VERBOSE_PRINTK=y
CONFIG_SND_AD1889=m CONFIG_SND_AD1889=m
# CONFIG_SND_USB is not set # CONFIG_SND_USB is not set
# CONFIG_SND_GSC is not set # CONFIG_SND_GSC is not set
CONFIG_HID_A4TECH=m
CONFIG_HID_APPLE=m
CONFIG_HID_BELKIN=m
CONFIG_HID_CHERRY=m
CONFIG_HID_CHICONY=m
CONFIG_HID_CYPRESS=m
CONFIG_HID_DRAGONRISE=m
CONFIG_HID_EZKEY=m
CONFIG_HID_KYE=m
CONFIG_HID_GYRATION=m
CONFIG_HID_TWINHAN=m
CONFIG_HID_KENSINGTON=m
CONFIG_HID_LOGITECH=m
CONFIG_HID_LOGITECH_DJ=m
CONFIG_HID_MICROSOFT=m
CONFIG_HID_MONTEREY=m
CONFIG_HID_NTRIG=m
CONFIG_HID_ORTEK=m
CONFIG_HID_PANTHERLORD=m
CONFIG_HID_PETALYNX=m
CONFIG_HID_SAMSUNG=m
CONFIG_HID_SUNPLUS=m
CONFIG_HID_GREENASIA=m
CONFIG_HID_SMARTJOYPLUS=m
CONFIG_HID_TOPSEED=m
CONFIG_HID_THRUSTMASTER=m
CONFIG_HID_ZEROPLUS=m
CONFIG_USB_HID=m
CONFIG_USB=y CONFIG_USB=y
CONFIG_USB_OHCI_HCD=y CONFIG_USB_OHCI_HCD=y
CONFIG_USB_STORAGE=y CONFIG_USB_STORAGE=y
......
...@@ -24,7 +24,6 @@ CONFIG_MODVERSIONS=y ...@@ -24,7 +24,6 @@ CONFIG_MODVERSIONS=y
CONFIG_BLK_DEV_INTEGRITY=y CONFIG_BLK_DEV_INTEGRITY=y
# CONFIG_IOSCHED_DEADLINE is not set # CONFIG_IOSCHED_DEADLINE is not set
CONFIG_PA8X00=y CONFIG_PA8X00=y
CONFIG_MLONGCALLS=y
CONFIG_64BIT=y CONFIG_64BIT=y
CONFIG_SMP=y CONFIG_SMP=y
# CONFIG_COMPACTION is not set # CONFIG_COMPACTION is not set
...@@ -68,7 +67,6 @@ CONFIG_IDE_GD=m ...@@ -68,7 +67,6 @@ CONFIG_IDE_GD=m
CONFIG_IDE_GD_ATAPI=y CONFIG_IDE_GD_ATAPI=y
CONFIG_BLK_DEV_IDECD=m CONFIG_BLK_DEV_IDECD=m
CONFIG_BLK_DEV_NS87415=y CONFIG_BLK_DEV_NS87415=y
CONFIG_BLK_DEV_SIIMAGE=y
# CONFIG_SCSI_PROC_FS is not set # CONFIG_SCSI_PROC_FS is not set
CONFIG_BLK_DEV_SD=y CONFIG_BLK_DEV_SD=y
CONFIG_BLK_DEV_SR=y CONFIG_BLK_DEV_SR=y
...@@ -82,6 +80,7 @@ CONFIG_SCSI_ZALON=y ...@@ -82,6 +80,7 @@ CONFIG_SCSI_ZALON=y
CONFIG_SCSI_QLA_ISCSI=m CONFIG_SCSI_QLA_ISCSI=m
CONFIG_SCSI_DH=y CONFIG_SCSI_DH=y
CONFIG_ATA=y CONFIG_ATA=y
CONFIG_PATA_SIL680=y
CONFIG_ATA_GENERIC=y CONFIG_ATA_GENERIC=y
CONFIG_MD=y CONFIG_MD=y
CONFIG_MD_LINEAR=m CONFIG_MD_LINEAR=m
...@@ -162,7 +161,7 @@ CONFIG_SLIP_MODE_SLIP6=y ...@@ -162,7 +161,7 @@ CONFIG_SLIP_MODE_SLIP6=y
CONFIG_INPUT_EVDEV=y CONFIG_INPUT_EVDEV=y
# CONFIG_KEYBOARD_HIL_OLD is not set # CONFIG_KEYBOARD_HIL_OLD is not set
# CONFIG_KEYBOARD_HIL is not set # CONFIG_KEYBOARD_HIL is not set
# CONFIG_INPUT_MOUSE is not set # CONFIG_MOUSE_PS2 is not set
CONFIG_INPUT_MISC=y CONFIG_INPUT_MISC=y
CONFIG_SERIO_SERPORT=m CONFIG_SERIO_SERPORT=m
# CONFIG_HP_SDC is not set # CONFIG_HP_SDC is not set
...@@ -216,32 +215,7 @@ CONFIG_BACKLIGHT_LCD_SUPPORT=y ...@@ -216,32 +215,7 @@ CONFIG_BACKLIGHT_LCD_SUPPORT=y
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
CONFIG_LOGO=y CONFIG_LOGO=y
# CONFIG_LOGO_LINUX_MONO is not set # CONFIG_LOGO_LINUX_MONO is not set
CONFIG_HID=m
CONFIG_HIDRAW=y CONFIG_HIDRAW=y
CONFIG_HID_DRAGONRISE=m
CONFIG_DRAGONRISE_FF=y
CONFIG_HID_KYE=m
CONFIG_HID_GYRATION=m
CONFIG_HID_TWINHAN=m
CONFIG_LOGITECH_FF=y
CONFIG_LOGIRUMBLEPAD2_FF=y
CONFIG_HID_NTRIG=m
CONFIG_HID_PANTHERLORD=m
CONFIG_PANTHERLORD_FF=y
CONFIG_HID_PETALYNX=m
CONFIG_HID_SAMSUNG=m
CONFIG_HID_SONY=m
CONFIG_HID_SUNPLUS=m
CONFIG_HID_GREENASIA=m
CONFIG_GREENASIA_FF=y
CONFIG_HID_SMARTJOYPLUS=m
CONFIG_SMARTJOYPLUS_FF=y
CONFIG_HID_TOPSEED=m
CONFIG_HID_THRUSTMASTER=m
CONFIG_THRUSTMASTER_FF=y
CONFIG_HID_ZEROPLUS=m
CONFIG_ZEROPLUS_FF=y
CONFIG_USB_HID=m
CONFIG_HID_PID=y CONFIG_HID_PID=y
CONFIG_USB_HIDDEV=y CONFIG_USB_HIDDEV=y
CONFIG_USB=y CONFIG_USB=y
...@@ -251,13 +225,8 @@ CONFIG_USB_DYNAMIC_MINORS=y ...@@ -251,13 +225,8 @@ CONFIG_USB_DYNAMIC_MINORS=y
CONFIG_USB_MON=m CONFIG_USB_MON=m
CONFIG_USB_WUSB_CBAF=m CONFIG_USB_WUSB_CBAF=m
CONFIG_USB_XHCI_HCD=m CONFIG_USB_XHCI_HCD=m
CONFIG_USB_EHCI_HCD=m CONFIG_USB_EHCI_HCD=y
CONFIG_USB_OHCI_HCD=m CONFIG_USB_OHCI_HCD=y
CONFIG_USB_R8A66597_HCD=m
CONFIG_USB_ACM=m
CONFIG_USB_PRINTER=m
CONFIG_USB_WDM=m
CONFIG_USB_TMC=m
CONFIG_NEW_LEDS=y CONFIG_NEW_LEDS=y
CONFIG_LEDS_CLASS=y CONFIG_LEDS_CLASS=y
CONFIG_LEDS_TRIGGERS=y CONFIG_LEDS_TRIGGERS=y
......
...@@ -6,5 +6,3 @@ ...@@ -6,5 +6,3 @@
* This is used for 16550-compatible UARTs * This is used for 16550-compatible UARTs
*/ */
#define BASE_BAUD ( 1843200 / 16 ) #define BASE_BAUD ( 1843200 / 16 )
#define SERIAL_PORT_DFNS
...@@ -36,6 +36,9 @@ ...@@ -36,6 +36,9 @@
* HP PARISC Hardware Database * HP PARISC Hardware Database
* Access to this database is only possible during bootup * Access to this database is only possible during bootup
* so don't reference this table after starting the init process * so don't reference this table after starting the init process
*
* NOTE: Product names which are listed here and ends with a '?'
* are guessed. If you know the correct name, please let us know.
*/ */
static struct hp_hardware hp_hardware_list[] = { static struct hp_hardware hp_hardware_list[] = {
...@@ -222,7 +225,7 @@ static struct hp_hardware hp_hardware_list[] = { ...@@ -222,7 +225,7 @@ static struct hp_hardware hp_hardware_list[] = {
{HPHW_NPROC,0x5DD,0x4,0x81,"Duet W2"}, {HPHW_NPROC,0x5DD,0x4,0x81,"Duet W2"},
{HPHW_NPROC,0x5DE,0x4,0x81,"Piccolo W+"}, {HPHW_NPROC,0x5DE,0x4,0x81,"Piccolo W+"},
{HPHW_NPROC,0x5DF,0x4,0x81,"Cantata W2"}, {HPHW_NPROC,0x5DF,0x4,0x81,"Cantata W2"},
{HPHW_NPROC,0x5DF,0x0,0x00,"Marcato W+? (rp5470)"}, {HPHW_NPROC,0x5DF,0x0,0x00,"Marcato W+ (rp5470)?"},
{HPHW_NPROC,0x5E0,0x4,0x91,"Cantata DC- W2"}, {HPHW_NPROC,0x5E0,0x4,0x91,"Cantata DC- W2"},
{HPHW_NPROC,0x5E1,0x4,0x91,"Crescendo DC- W2"}, {HPHW_NPROC,0x5E1,0x4,0x91,"Crescendo DC- W2"},
{HPHW_NPROC,0x5E2,0x4,0x91,"Crescendo 650 W2"}, {HPHW_NPROC,0x5E2,0x4,0x91,"Crescendo 650 W2"},
...@@ -276,9 +279,11 @@ static struct hp_hardware hp_hardware_list[] = { ...@@ -276,9 +279,11 @@ static struct hp_hardware hp_hardware_list[] = {
{HPHW_NPROC,0x888,0x4,0x91,"Storm Peak Fast DC-"}, {HPHW_NPROC,0x888,0x4,0x91,"Storm Peak Fast DC-"},
{HPHW_NPROC,0x889,0x4,0x91,"Storm Peak Fast"}, {HPHW_NPROC,0x889,0x4,0x91,"Storm Peak Fast"},
{HPHW_NPROC,0x88A,0x4,0x91,"Crestone Peak Slow"}, {HPHW_NPROC,0x88A,0x4,0x91,"Crestone Peak Slow"},
{HPHW_NPROC,0x88B,0x4,0x91,"Crestone Peak Fast?"},
{HPHW_NPROC,0x88C,0x4,0x91,"Orca Mako+"}, {HPHW_NPROC,0x88C,0x4,0x91,"Orca Mako+"},
{HPHW_NPROC,0x88D,0x4,0x91,"Rainier/Medel Mako+ Slow"}, {HPHW_NPROC,0x88D,0x4,0x91,"Rainier/Medel Mako+ Slow"},
{HPHW_NPROC,0x88E,0x4,0x91,"Rainier/Medel Mako+ Fast"}, {HPHW_NPROC,0x88E,0x4,0x91,"Rainier/Medel Mako+ Fast"},
{HPHW_NPROC,0x892,0x4,0x91,"Mt. Hamilton Slow Mako+?"},
{HPHW_NPROC,0x894,0x4,0x91,"Mt. Hamilton Fast Mako+"}, {HPHW_NPROC,0x894,0x4,0x91,"Mt. Hamilton Fast Mako+"},
{HPHW_NPROC,0x895,0x4,0x91,"Storm Peak Slow Mako+"}, {HPHW_NPROC,0x895,0x4,0x91,"Storm Peak Slow Mako+"},
{HPHW_NPROC,0x896,0x4,0x91,"Storm Peak Fast Mako+"}, {HPHW_NPROC,0x896,0x4,0x91,"Storm Peak Fast Mako+"},
......
...@@ -41,9 +41,7 @@ END(boot_args) ...@@ -41,9 +41,7 @@ END(boot_args)
.import fault_vector_11,code /* IVA parisc 1.1 32 bit */ .import fault_vector_11,code /* IVA parisc 1.1 32 bit */
.import $global$ /* forward declaration */ .import $global$ /* forward declaration */
#endif /*!CONFIG_64BIT*/ #endif /*!CONFIG_64BIT*/
.export _stext,data /* Kernel want it this way! */ ENTRY(parisc_kernel_start)
_stext:
ENTRY(stext)
.proc .proc
.callinfo .callinfo
...@@ -347,7 +345,7 @@ smp_slave_stext: ...@@ -347,7 +345,7 @@ smp_slave_stext:
.procend .procend
#endif /* CONFIG_SMP */ #endif /* CONFIG_SMP */
ENDPROC(stext) ENDPROC(parisc_kernel_start)
#ifndef CONFIG_64BIT #ifndef CONFIG_64BIT
.section .data..read_mostly .section .data..read_mostly
......
...@@ -61,8 +61,15 @@ static int get_offset(struct address_space *mapping) ...@@ -61,8 +61,15 @@ static int get_offset(struct address_space *mapping)
return (unsigned long) mapping >> 8; return (unsigned long) mapping >> 8;
} }
static unsigned long get_shared_area(struct address_space *mapping, static unsigned long shared_align_offset(struct file *filp, unsigned long pgoff)
unsigned long addr, unsigned long len, unsigned long pgoff) {
struct address_space *mapping = filp ? filp->f_mapping : NULL;
return (get_offset(mapping) + pgoff) << PAGE_SHIFT;
}
static unsigned long get_shared_area(struct file *filp, unsigned long addr,
unsigned long len, unsigned long pgoff)
{ {
struct vm_unmapped_area_info info; struct vm_unmapped_area_info info;
...@@ -71,7 +78,7 @@ static unsigned long get_shared_area(struct address_space *mapping, ...@@ -71,7 +78,7 @@ static unsigned long get_shared_area(struct address_space *mapping,
info.low_limit = PAGE_ALIGN(addr); info.low_limit = PAGE_ALIGN(addr);
info.high_limit = TASK_SIZE; info.high_limit = TASK_SIZE;
info.align_mask = PAGE_MASK & (SHMLBA - 1); info.align_mask = PAGE_MASK & (SHMLBA - 1);
info.align_offset = (get_offset(mapping) + pgoff) << PAGE_SHIFT; info.align_offset = shared_align_offset(filp, pgoff);
return vm_unmapped_area(&info); return vm_unmapped_area(&info);
} }
...@@ -82,20 +89,18 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, ...@@ -82,20 +89,18 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr,
return -ENOMEM; return -ENOMEM;
if (flags & MAP_FIXED) { if (flags & MAP_FIXED) {
if ((flags & MAP_SHARED) && if ((flags & MAP_SHARED) &&
(addr - (pgoff << PAGE_SHIFT)) & (SHMLBA - 1)) (addr - shared_align_offset(filp, pgoff)) & (SHMLBA - 1))
return -EINVAL; return -EINVAL;
return addr; return addr;
} }
if (!addr) if (!addr)
addr = TASK_UNMAPPED_BASE; addr = TASK_UNMAPPED_BASE;
if (filp) { if (filp || (flags & MAP_SHARED))
addr = get_shared_area(filp->f_mapping, addr, len, pgoff); addr = get_shared_area(filp, addr, len, pgoff);
} else if(flags & MAP_SHARED) { else
addr = get_shared_area(NULL, addr, len, pgoff);
} else {
addr = get_unshared_area(addr, len); addr = get_unshared_area(addr, len);
}
return addr; return addr;
} }
......
...@@ -168,7 +168,7 @@ void unwind_table_remove(struct unwind_table *table) ...@@ -168,7 +168,7 @@ void unwind_table_remove(struct unwind_table *table)
} }
/* Called from setup_arch to import the kernel unwind info */ /* Called from setup_arch to import the kernel unwind info */
int unwind_init(void) int __init unwind_init(void)
{ {
long start, stop; long start, stop;
register unsigned long gp __asm__ ("r27"); register unsigned long gp __asm__ ("r27");
...@@ -233,7 +233,6 @@ static void unwind_frame_regs(struct unwind_frame_info *info) ...@@ -233,7 +233,6 @@ static void unwind_frame_regs(struct unwind_frame_info *info)
e = find_unwind_entry(info->ip); e = find_unwind_entry(info->ip);
if (e == NULL) { if (e == NULL) {
unsigned long sp; unsigned long sp;
extern char _stext[], _etext[];
dbg("Cannot find unwind entry for 0x%lx; forced unwinding\n", info->ip); dbg("Cannot find unwind entry for 0x%lx; forced unwinding\n", info->ip);
...@@ -281,8 +280,7 @@ static void unwind_frame_regs(struct unwind_frame_info *info) ...@@ -281,8 +280,7 @@ static void unwind_frame_regs(struct unwind_frame_info *info)
break; break;
info->prev_ip = tmp; info->prev_ip = tmp;
sp = info->prev_sp; sp = info->prev_sp;
} while (info->prev_ip < (unsigned long)_stext || } while (!kernel_text_address(info->prev_ip));
info->prev_ip > (unsigned long)_etext);
info->rp = 0; info->rp = 0;
...@@ -435,9 +433,8 @@ unsigned long return_address(unsigned int level) ...@@ -435,9 +433,8 @@ unsigned long return_address(unsigned int level)
do { do {
if (unwind_once(&info) < 0 || info.ip == 0) if (unwind_once(&info) < 0 || info.ip == 0)
return 0; return 0;
if (!__kernel_text_address(info.ip)) { if (!kernel_text_address(info.ip))
return 0; return 0;
}
} while (info.ip && level--); } while (info.ip && level--);
return info.ip; return info.ip;
......
...@@ -6,24 +6,19 @@ ...@@ -6,24 +6,19 @@
* Copyright (C) 2000 Michael Ang <mang with subcarrier.org> * Copyright (C) 2000 Michael Ang <mang with subcarrier.org>
* Copyright (C) 2002 Randolph Chung <tausq with parisc-linux.org> * Copyright (C) 2002 Randolph Chung <tausq with parisc-linux.org>
* Copyright (C) 2003 James Bottomley <jejb with parisc-linux.org> * Copyright (C) 2003 James Bottomley <jejb with parisc-linux.org>
* Copyright (C) 2006 Helge Deller <deller@gmx.de> * Copyright (C) 2006-2013 Helge Deller <deller@gmx.de>
* */
*
* This program is free software; you can redistribute it and/or modify /*
* it under the terms of the GNU General Public License as published by * Put page table entries (swapper_pg_dir) as the first thing in .bss. This
* the Free Software Foundation; either version 2 of the License, or * will ensure that it has .bss alignment (PAGE_SIZE).
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/ */
#define BSS_FIRST_SECTIONS *(.data..vm0.pmd) \
*(.data..vm0.pgd) \
*(.data..vm0.pte)
#include <asm-generic/vmlinux.lds.h> #include <asm-generic/vmlinux.lds.h>
/* needed for the processor specific cache alignment size */ /* needed for the processor specific cache alignment size */
#include <asm/cache.h> #include <asm/cache.h>
#include <asm/page.h> #include <asm/page.h>
...@@ -39,7 +34,7 @@ OUTPUT_FORMAT("elf64-hppa-linux") ...@@ -39,7 +34,7 @@ OUTPUT_FORMAT("elf64-hppa-linux")
OUTPUT_ARCH(hppa:hppa2.0w) OUTPUT_ARCH(hppa:hppa2.0w)
#endif #endif
ENTRY(_stext) ENTRY(parisc_kernel_start)
#ifndef CONFIG_64BIT #ifndef CONFIG_64BIT
jiffies = jiffies_64 + 4; jiffies = jiffies_64 + 4;
#else #else
...@@ -49,11 +44,29 @@ SECTIONS ...@@ -49,11 +44,29 @@ SECTIONS
{ {
. = KERNEL_BINARY_TEXT_START; . = KERNEL_BINARY_TEXT_START;
__init_begin = .;
HEAD_TEXT_SECTION
INIT_TEXT_SECTION(8)
. = ALIGN(PAGE_SIZE);
INIT_DATA_SECTION(PAGE_SIZE)
/* we have to discard exit text and such at runtime, not link time */
.exit.text :
{
EXIT_TEXT
}
.exit.data :
{
EXIT_DATA
}
PERCPU_SECTION(8)
. = ALIGN(PAGE_SIZE);
__init_end = .;
/* freed after init ends here */
_text = .; /* Text and read-only data */ _text = .; /* Text and read-only data */
.head ALIGN(16) : { _stext = .;
HEAD_TEXT .text ALIGN(PAGE_SIZE) : {
} = 0
.text ALIGN(16) : {
TEXT_TEXT TEXT_TEXT
SCHED_TEXT SCHED_TEXT
LOCK_TEXT LOCK_TEXT
...@@ -68,21 +81,28 @@ SECTIONS ...@@ -68,21 +81,28 @@ SECTIONS
*(.lock.text) /* out-of-line lock text */ *(.lock.text) /* out-of-line lock text */
*(.gnu.warning) *(.gnu.warning)
} }
/* End of text section */ . = ALIGN(PAGE_SIZE);
_etext = .; _etext = .;
/* End of text section */
/* Start of data section */ /* Start of data section */
_sdata = .; _sdata = .;
RODATA RO_DATA_SECTION(8)
/* writeable */ #ifdef CONFIG_64BIT
/* Make sure this is page aligned so . = ALIGN(16);
* that we can properly leave these /* Linkage tables */
* as writable .opd : {
*/ *(.opd)
. = ALIGN(PAGE_SIZE); } PROVIDE (__gp = .);
data_start = .; .plt : {
*(.plt)
}
.dlt : {
*(.dlt)
}
#endif
/* unwind info */ /* unwind info */
.PARISC.unwind : { .PARISC.unwind : {
...@@ -91,7 +111,15 @@ SECTIONS ...@@ -91,7 +111,15 @@ SECTIONS
__stop___unwind = .; __stop___unwind = .;
} }
EXCEPTION_TABLE(16) /* writeable */
/* Make sure this is page aligned so
* that we can properly leave these
* as writable
*/
. = ALIGN(PAGE_SIZE);
data_start = .;
EXCEPTION_TABLE(8)
NOTES NOTES
/* Data */ /* Data */
...@@ -107,54 +135,8 @@ SECTIONS ...@@ -107,54 +135,8 @@ SECTIONS
_edata = .; _edata = .;
/* BSS */ /* BSS */
__bss_start = .; BSS_SECTION(PAGE_SIZE, PAGE_SIZE, 8)
/* page table entries need to be PAGE_SIZE aligned */
. = ALIGN(PAGE_SIZE);
.data..vmpages : {
*(.data..vm0.pmd)
*(.data..vm0.pgd)
*(.data..vm0.pte)
}
.bss : {
*(.bss)
*(COMMON)
}
__bss_stop = .;
#ifdef CONFIG_64BIT
. = ALIGN(16);
/* Linkage tables */
.opd : {
*(.opd)
} PROVIDE (__gp = .);
.plt : {
*(.plt)
}
.dlt : {
*(.dlt)
}
#endif
/* reserve space for interrupt stack by aligning __init* to 16k */
. = ALIGN(16384);
__init_begin = .;
INIT_TEXT_SECTION(16384)
. = ALIGN(PAGE_SIZE);
INIT_DATA_SECTION(16)
/* we have to discard exit text and such at runtime, not link time */
.exit.text :
{
EXIT_TEXT
}
.exit.data :
{
EXIT_DATA
}
PERCPU_SECTION(L1_CACHE_BYTES)
. = ALIGN(PAGE_SIZE);
__init_end = .;
/* freed after init ends here */
_end = . ; _end = . ;
STABS_DEBUG STABS_DEBUG
......
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
#include <asm/sections.h> #include <asm/sections.h>
extern int data_start; extern int data_start;
extern void parisc_kernel_start(void); /* Kernel entry point in head.S */
#if PT_NLEVELS == 3 #if PT_NLEVELS == 3
/* NOTE: This layout exactly conforms to the hybrid L2/L3 page table layout /* NOTE: This layout exactly conforms to the hybrid L2/L3 page table layout
...@@ -324,8 +325,9 @@ static void __init setup_bootmem(void) ...@@ -324,8 +325,9 @@ static void __init setup_bootmem(void)
reserve_bootmem_node(NODE_DATA(0), 0UL, reserve_bootmem_node(NODE_DATA(0), 0UL,
(unsigned long)(PAGE0->mem_free + (unsigned long)(PAGE0->mem_free +
PDC_CONSOLE_IO_IODC_SIZE), BOOTMEM_DEFAULT); PDC_CONSOLE_IO_IODC_SIZE), BOOTMEM_DEFAULT);
reserve_bootmem_node(NODE_DATA(0), __pa((unsigned long)_text), reserve_bootmem_node(NODE_DATA(0), __pa(KERNEL_BINARY_TEXT_START),
(unsigned long)(_end - _text), BOOTMEM_DEFAULT); (unsigned long)(_end - KERNEL_BINARY_TEXT_START),
BOOTMEM_DEFAULT);
reserve_bootmem_node(NODE_DATA(0), (bootmap_start_pfn << PAGE_SHIFT), reserve_bootmem_node(NODE_DATA(0), (bootmap_start_pfn << PAGE_SHIFT),
((bootmap_pfn - bootmap_start_pfn) << PAGE_SHIFT), ((bootmap_pfn - bootmap_start_pfn) << PAGE_SHIFT),
BOOTMEM_DEFAULT); BOOTMEM_DEFAULT);
...@@ -378,6 +380,17 @@ static void __init setup_bootmem(void) ...@@ -378,6 +380,17 @@ static void __init setup_bootmem(void)
request_resource(&sysram_resources[0], &pdcdata_resource); request_resource(&sysram_resources[0], &pdcdata_resource);
} }
static int __init parisc_text_address(unsigned long vaddr)
{
static unsigned long head_ptr __initdata;
if (!head_ptr)
head_ptr = PAGE_MASK & (unsigned long)
dereference_function_descriptor(&parisc_kernel_start);
return core_kernel_text(vaddr) || vaddr == head_ptr;
}
static void __init map_pages(unsigned long start_vaddr, static void __init map_pages(unsigned long start_vaddr,
unsigned long start_paddr, unsigned long size, unsigned long start_paddr, unsigned long size,
pgprot_t pgprot, int force) pgprot_t pgprot, int force)
...@@ -466,7 +479,7 @@ static void __init map_pages(unsigned long start_vaddr, ...@@ -466,7 +479,7 @@ static void __init map_pages(unsigned long start_vaddr,
*/ */
if (force) if (force)
pte = __mk_pte(address, pgprot); pte = __mk_pte(address, pgprot);
else if (core_kernel_text(vaddr) && else if (parisc_text_address(vaddr) &&
address != fv_addr) address != fv_addr)
pte = __mk_pte(address, PAGE_KERNEL_EXEC); pte = __mk_pte(address, PAGE_KERNEL_EXEC);
else else
......
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