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 5ecbe3c3c6
-
"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
This commit is contained in:
commit
8aa9c36788
10 changed files with 110 additions and 173 deletions
|
@ -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
|
||||||
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
|
||||||
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
|
||||||
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
|
||||||
# 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
|
||||||
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
|
||||||
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
|
||||||
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
|
||||||
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
|
||||||
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
|
||||||
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
|
||||||
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 @@
|
||||||
* 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 @@
|
||||||
* 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[] = {
|
||||||
{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[] = {
|
||||||
{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)
|
||||||
.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:
|
||||||
.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)
|
||||||
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,
|
||||||
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,
|
||||||
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)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 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)
|
||||||
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)
|
||||||
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)
|
||||||
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 @@
|
||||||
* 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
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (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
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Put page table entries (swapper_pg_dir) as the first thing in .bss. This
|
||||||
|
* will ensure that it has .bss alignment (PAGE_SIZE).
|
||||||
|
*/
|
||||||
|
#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")
|
||||||
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
|
||||||
{
|
{
|
||||||
. = 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,13 +81,35 @@ 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)
|
||||||
|
|
||||||
|
#ifdef CONFIG_64BIT
|
||||||
|
. = ALIGN(16);
|
||||||
|
/* Linkage tables */
|
||||||
|
.opd : {
|
||||||
|
*(.opd)
|
||||||
|
} PROVIDE (__gp = .);
|
||||||
|
.plt : {
|
||||||
|
*(.plt)
|
||||||
|
}
|
||||||
|
.dlt : {
|
||||||
|
*(.dlt)
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* unwind info */
|
||||||
|
.PARISC.unwind : {
|
||||||
|
__start___unwind = .;
|
||||||
|
*(.PARISC.unwind)
|
||||||
|
__stop___unwind = .;
|
||||||
|
}
|
||||||
|
|
||||||
/* writeable */
|
/* writeable */
|
||||||
/* Make sure this is page aligned so
|
/* Make sure this is page aligned so
|
||||||
|
@ -84,14 +119,7 @@ SECTIONS
|
||||||
. = ALIGN(PAGE_SIZE);
|
. = ALIGN(PAGE_SIZE);
|
||||||
data_start = .;
|
data_start = .;
|
||||||
|
|
||||||
/* unwind info */
|
EXCEPTION_TABLE(8)
|
||||||
.PARISC.unwind : {
|
|
||||||
__start___unwind = .;
|
|
||||||
*(.PARISC.unwind)
|
|
||||||
__stop___unwind = .;
|
|
||||||
}
|
|
||||||
|
|
||||||
EXCEPTION_TABLE(16)
|
|
||||||
NOTES
|
NOTES
|
||||||
|
|
||||||
/* Data */
|
/* Data */
|
||||||
|
@ -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 @@
|
||||||
#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)
|
||||||
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)
|
||||||
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,
|
||||||
*/
|
*/
|
||||||
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
|
||||||
|
|
Loading…
Add table
Reference in a new issue