Commit af9df9e3 authored by Linus Torvalds's avatar Linus Torvalds

Merge

parents b1975584 a0b7ca57
...@@ -394,6 +394,17 @@ $(SUBDIRS): .hdepend prepare ...@@ -394,6 +394,17 @@ $(SUBDIRS): .hdepend prepare
prepare: include/linux/version.h include/asm include/config/MARKER prepare: include/linux/version.h include/asm include/config/MARKER
@echo ' Starting the build. KBUILD_BUILTIN=$(KBUILD_BUILTIN) KBUILD_MODULES=$(KBUILD_MODULES)' @echo ' Starting the build. KBUILD_BUILTIN=$(KBUILD_BUILTIN) KBUILD_MODULES=$(KBUILD_MODULES)'
# We need to build init/vermagic.o before descending since all modules
# (*.ko) need it already
ifdef CONFIG_MODULES
prepare: init/vermagic.o
init/vermagic.o: include/linux/version.h
endif
# This can be used by arch/$ARCH/Makefile to preprocess # This can be used by arch/$ARCH/Makefile to preprocess
# their vmlinux.lds.S file # their vmlinux.lds.S file
......
#include <linux/config.h> #include <linux/config.h>
#include <asm-generic/vmlinux.lds.h>
OUTPUT_FORMAT("elf64-alpha") OUTPUT_FORMAT("elf64-alpha")
OUTPUT_ARCH(alpha) OUTPUT_ARCH(alpha)
...@@ -20,9 +21,7 @@ SECTIONS ...@@ -20,9 +21,7 @@ SECTIONS
*(.gnu.warning) *(.gnu.warning)
} :kernel } :kernel
_etext = .; /* End of text section */ _etext = .; /* End of text section */
RODATA
.rodata : { *(.rodata) *(.rodata.*) }
.kstrtab : { *(.kstrtab) }
. = ALIGN(16); . = ALIGN(16);
__start___ex_table = .; /* Exception table */ __start___ex_table = .; /* Exception table */
......
...@@ -2,6 +2,9 @@ ...@@ -2,6 +2,9 @@
* taken from the i386 version by Russell King * taken from the i386 version by Russell King
* Written by Martin Mares <mj@atrey.karlin.mff.cuni.cz> * Written by Martin Mares <mj@atrey.karlin.mff.cuni.cz>
*/ */
#include <asm-generic/vmlinux.lds.h>
OUTPUT_ARCH(arm) OUTPUT_ARCH(arm)
ENTRY(stext) ENTRY(stext)
jiffies = jiffies_64; jiffies = jiffies_64;
...@@ -63,8 +66,6 @@ SECTIONS ...@@ -63,8 +66,6 @@ SECTIONS
_etext = .; /* End of text section */ _etext = .; /* End of text section */
} }
.kstrtab : { *(.kstrtab) }
. = ALIGN(16); . = ALIGN(16);
__ex_table : { /* Exception table */ __ex_table : { /* Exception table */
__start___ex_table = .; __start___ex_table = .;
...@@ -72,17 +73,7 @@ SECTIONS ...@@ -72,17 +73,7 @@ SECTIONS
__stop___ex_table = .; __stop___ex_table = .;
} }
__ksymtab : { /* Kernel symbol table */ RODATA
__start___ksymtab = .;
*(__ksymtab)
__stop___ksymtab = .;
}
__gpl_ksymtab : { /* Kernel symbol table: GPL-only */
__start___gpl_ksymtab = .;
*(__gpl_ksymtab)
__stop___gpl_ksymtab = .;
}
.data : { .data : {
/* /*
......
...@@ -2,6 +2,9 @@ ...@@ -2,6 +2,9 @@
* taken from the i386 version by Russell King * taken from the i386 version by Russell King
* Written by Martin Mares <mj@atrey.karlin.mff.cuni.cz> * Written by Martin Mares <mj@atrey.karlin.mff.cuni.cz>
*/ */
#include <asm-generic/vmlinux.lds.h>
OUTPUT_ARCH(arm) OUTPUT_ARCH(arm)
ENTRY(stext) ENTRY(stext)
jiffies = jiffies_64; jiffies = jiffies_64;
...@@ -66,8 +69,6 @@ SECTIONS ...@@ -66,8 +69,6 @@ SECTIONS
_etext = .; /* End of text section */ _etext = .; /* End of text section */
} }
.kstrtab : { *(.kstrtab) }
. = ALIGN(16); . = ALIGN(16);
__ex_table : { /* Exception table */ __ex_table : { /* Exception table */
__start___ex_table = .; __start___ex_table = .;
...@@ -75,23 +76,7 @@ SECTIONS ...@@ -75,23 +76,7 @@ SECTIONS
__stop___ex_table = .; __stop___ex_table = .;
} }
__gpl_ksymtab : { /* GPL Kernel symbol table */ RODATA
__start___gpl_ksymtab = .;
*(__gpl_ksymtab)
__stop___gpl_ksymtab = .;
}
__ksymtab : { /* Kernel symbol table */
__start___ksymtab = .;
*(__ksymtab)
__stop___ksymtab = .;
}
__kallsyms : { /* All kernel symbols */
__start___kallsyms = .;
*(__kallsyms)
__stop___kallsyms = .;
}
. = ALIGN(8192); . = ALIGN(8192);
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
*/ */
#include <linux/config.h> #include <linux/config.h>
#include <asm-generic/vmlinux.lds.h>
jiffies = jiffies_64; jiffies = jiffies_64;
SECTIONS SECTIONS
...@@ -31,21 +32,12 @@ SECTIONS ...@@ -31,21 +32,12 @@ SECTIONS
_etext = . ; /* End of text section */ _etext = . ; /* End of text section */
__etext = .; __etext = .;
.rodata : { *(.rodata) *(.rodata.__*) }
.kstrtab : { *(.kstrtab) }
. = ALIGN(4); /* Exception table */ . = ALIGN(4); /* Exception table */
__start___ex_table = .; __start___ex_table = .;
__ex_table : { *(__ex_table) } __ex_table : { *(__ex_table) }
__stop___ex_table = .; __stop___ex_table = .;
__start___ksymtab = .; /* Kernel symbol table */ RODATA
__ksymtab : { *(__ksymtab) }
__stop___ksymtab = .;
__start___gpl_ksymtab = .; /* Kernel symbol table: GPL-only */
__gpl_ksymtab : { *(__gpl_ksymtab) }
__stop___gpl_ksymtab = .;
. = ALIGN (4); . = ALIGN (4);
___data_start = . ; ___data_start = . ;
......
...@@ -69,6 +69,10 @@ mcore-$(CONFIG_X86_NUMAQ) := mach-default ...@@ -69,6 +69,10 @@ mcore-$(CONFIG_X86_NUMAQ) := mach-default
mflags-$(CONFIG_X86_BIGSMP) := -Iinclude/asm-i386/mach-bigsmp mflags-$(CONFIG_X86_BIGSMP) := -Iinclude/asm-i386/mach-bigsmp
mcore-$(CONFIG_X86_BIGSMP) := mach-default mcore-$(CONFIG_X86_BIGSMP) := mach-default
#Summit subarch support
mflags-$(CONFIG_X86_SUMMIT) := -Iinclude/asm-i386/mach-summit
mcore-$(CONFIG_X86_SUMMIT) := mach-default
# default subarch .h files # default subarch .h files
mflags-y += -Iinclude/asm-i386/mach-default mflags-y += -Iinclude/asm-i386/mach-default
......
...@@ -44,6 +44,8 @@ ...@@ -44,6 +44,8 @@
#include <asm/io_apic.h> #include <asm/io_apic.h>
#include <asm/tlbflush.h> #include <asm/tlbflush.h>
#include <mach_apic.h>
#include <mach_mpparse.h>
#define PREFIX "ACPI: " #define PREFIX "ACPI: "
...@@ -126,6 +128,8 @@ acpi_parse_madt ( ...@@ -126,6 +128,8 @@ acpi_parse_madt (
printk(KERN_INFO PREFIX "Local APIC address 0x%08x\n", printk(KERN_INFO PREFIX "Local APIC address 0x%08x\n",
madt->lapic_address); madt->lapic_address);
acpi_madt_oem_check(madt->header.oem_id, madt->header.oem_table_id);
return 0; return 0;
} }
...@@ -430,8 +434,10 @@ acpi_boot_init ( ...@@ -430,8 +434,10 @@ acpi_boot_init (
#endif /*CONFIG_X86_IO_APIC*/ #endif /*CONFIG_X86_IO_APIC*/
#ifdef CONFIG_X86_LOCAL_APIC #ifdef CONFIG_X86_LOCAL_APIC
if (acpi_lapic && acpi_ioapic) if (acpi_lapic && acpi_ioapic) {
smp_found_config = 1; smp_found_config = 1;
clustered_apic_check();
}
#endif #endif
return 0; return 0;
......
...@@ -482,6 +482,7 @@ static int __init cpufreq_gx_init(void) ...@@ -482,6 +482,7 @@ static int __init cpufreq_gx_init(void)
driver->policy[0].cpuinfo.transition_latency = CPUFREQ_ETERNAL; driver->policy[0].cpuinfo.transition_latency = CPUFREQ_ETERNAL;
driver->verify = &cpufreq_gx_verify; driver->verify = &cpufreq_gx_verify;
driver->setpolicy = &cpufreq_gx_setpolicy; driver->setpolicy = &cpufreq_gx_setpolicy;
strncpy(driver->name, "gx-suspmod", CPUFREQ_NAME_LEN);
gx_driver = driver; gx_driver = driver;
......
...@@ -278,7 +278,7 @@ static inline void balance_irq(int irq) ...@@ -278,7 +278,7 @@ static inline void balance_irq(int irq)
new_cpu = move(entry->cpu, allowed_mask, now, random_number); new_cpu = move(entry->cpu, allowed_mask, now, random_number);
if (entry->cpu != new_cpu) { if (entry->cpu != new_cpu) {
entry->cpu = new_cpu; entry->cpu = new_cpu;
set_ioapic_affinity(irq, 1 << new_cpu); set_ioapic_affinity(irq, cpu_to_logical_apicid(new_cpu));
} }
} }
} }
...@@ -719,8 +719,8 @@ void __init setup_IO_APIC_irqs(void) ...@@ -719,8 +719,8 @@ void __init setup_IO_APIC_irqs(void)
*/ */
memset(&entry,0,sizeof(entry)); memset(&entry,0,sizeof(entry));
entry.delivery_mode = dest_LowestPrio; entry.delivery_mode = INT_DELIVERY_MODE;
entry.dest_mode = INT_DELIVERY_MODE; entry.dest_mode = INT_DEST_MODE;
entry.mask = 0; /* enable IRQ */ entry.mask = 0; /* enable IRQ */
entry.dest.logical.logical_dest = TARGET_CPUS; entry.dest.logical.logical_dest = TARGET_CPUS;
...@@ -799,10 +799,10 @@ void __init setup_ExtINT_IRQ0_pin(unsigned int pin, int vector) ...@@ -799,10 +799,10 @@ void __init setup_ExtINT_IRQ0_pin(unsigned int pin, int vector)
* We use logical delivery to get the timer IRQ * We use logical delivery to get the timer IRQ
* to the first CPU. * to the first CPU.
*/ */
entry.dest_mode = INT_DELIVERY_MODE; entry.dest_mode = INT_DEST_MODE;
entry.mask = 0; /* unmask IRQ now */ entry.mask = 0; /* unmask IRQ now */
entry.dest.logical.logical_dest = TARGET_CPUS; entry.dest.logical.logical_dest = TARGET_CPUS;
entry.delivery_mode = dest_LowestPrio; entry.delivery_mode = INT_DELIVERY_MODE;
entry.polarity = 0; entry.polarity = 0;
entry.trigger = 0; entry.trigger = 0;
entry.vector = vector; entry.vector = vector;
...@@ -1763,7 +1763,7 @@ late_initcall(io_apic_bug_finalize); ...@@ -1763,7 +1763,7 @@ late_initcall(io_apic_bug_finalize);
#ifdef CONFIG_ACPI_BOOT #ifdef CONFIG_ACPI_BOOT
#define IO_APIC_MAX_ID 15 #define IO_APIC_MAX_ID APIC_BROADCAST_ID
int __init io_apic_get_unique_id (int ioapic, int apic_id) int __init io_apic_get_unique_id (int ioapic, int apic_id)
{ {
...@@ -1880,8 +1880,8 @@ int io_apic_set_pci_routing (int ioapic, int pin, int irq) ...@@ -1880,8 +1880,8 @@ int io_apic_set_pci_routing (int ioapic, int pin, int irq)
memset(&entry,0,sizeof(entry)); memset(&entry,0,sizeof(entry));
entry.delivery_mode = dest_LowestPrio; entry.delivery_mode = INT_DELIVERY_MODE;
entry.dest_mode = INT_DELIVERY_MODE; entry.dest_mode = INT_DEST_MODE;
entry.dest.logical.logical_dest = TARGET_CPUS; entry.dest.logical.logical_dest = TARGET_CPUS;
entry.mask = 1; /* Disabled (masked) */ entry.mask = 1; /* Disabled (masked) */
entry.trigger = 1; /* Level sensitive */ entry.trigger = 1; /* Level sensitive */
......
...@@ -72,8 +72,8 @@ static unsigned int __initdata num_processors; ...@@ -72,8 +72,8 @@ static unsigned int __initdata num_processors;
/* Bitmask of physically existing CPUs */ /* Bitmask of physically existing CPUs */
unsigned long phys_cpu_present_map; unsigned long phys_cpu_present_map;
int summit_x86 = 0; int x86_summit = 0;
u8 raw_phys_apicid[NR_CPUS] = { [0 ... NR_CPUS-1] = BAD_APICID }; u8 bios_cpu_apicid[NR_CPUS] = { [0 ... NR_CPUS-1] = BAD_APICID };
/* /*
* Intel MP BIOS table parsing routines: * Intel MP BIOS table parsing routines:
...@@ -186,7 +186,7 @@ void __init MP_processor_info (struct mpc_config_processor *m) ...@@ -186,7 +186,7 @@ void __init MP_processor_info (struct mpc_config_processor *m)
ver = 0x10; ver = 0x10;
} }
apic_version[m->mpc_apicid] = ver; apic_version[m->mpc_apicid] = ver;
raw_phys_apicid[num_processors - 1] = m->mpc_apicid; bios_cpu_apicid[num_processors - 1] = m->mpc_apicid;
} }
static void __init MP_bus_info (struct mpc_config_bus *m) static void __init MP_bus_info (struct mpc_config_bus *m)
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include <asm/pgalloc.h> #include <asm/pgalloc.h>
#include <asm/tlbflush.h> #include <asm/tlbflush.h>
#include <mach_ipi.h> #include <mach_ipi.h>
#include <mach_apic.h>
/* /*
* Some notes on x86 processor bugs affecting SMP operation: * Some notes on x86 processor bugs affecting SMP operation:
......
...@@ -1045,10 +1045,10 @@ static void __init smp_boot_cpus(unsigned int max_cpus) ...@@ -1045,10 +1045,10 @@ static void __init smp_boot_cpus(unsigned int max_cpus)
/* /*
* Don't even attempt to start the boot CPU! * Don't even attempt to start the boot CPU!
*/ */
if (apicid == boot_cpu_apicid) if ((apicid == boot_cpu_apicid) || (apicid == BAD_APICID))
continue; continue;
if (!(phys_cpu_present_map & (1 << bit))) if (!check_apicid_present(bit))
continue; continue;
if (max_cpus <= cpucount+1) if (max_cpus <= cpucount+1)
continue; continue;
......
/* ld script to make i386 Linux kernel /* ld script to make i386 Linux kernel
* Written by Martin Mares <mj@atrey.karlin.mff.cuni.cz>; * Written by Martin Mares <mj@atrey.karlin.mff.cuni.cz>;
*/ */
#include <asm-generic/vmlinux.lds.h>
OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386") OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
OUTPUT_ARCH(i386) OUTPUT_ARCH(i386)
ENTRY(_start) ENTRY(_start)
...@@ -18,26 +21,12 @@ SECTIONS ...@@ -18,26 +21,12 @@ SECTIONS
_etext = .; /* End of text section */ _etext = .; /* End of text section */
.rodata : { *(.rodata) *(.rodata.*) }
.kstrtab : { *(.kstrtab) }
. = ALIGN(16); /* Exception table */ . = ALIGN(16); /* Exception table */
__start___ex_table = .; __start___ex_table = .;
__ex_table : { *(__ex_table) } __ex_table : { *(__ex_table) }
__stop___ex_table = .; __stop___ex_table = .;
. = ALIGN(64); RODATA
__start___ksymtab = .; /* Kernel symbol table */
__ksymtab : { *(__ksymtab) }
__stop___ksymtab = .;
__start___gpl_ksymtab = .; /* Kernel symbol table: GPL-only symbols */
__gpl_ksymtab : { *(__gpl_ksymtab) }
__stop___gpl_ksymtab = .;
__start___kallsyms = .; /* All kernel symbols */
__kallsyms : { *(__kallsyms) }
__stop___kallsyms = .;
/* writeable */ /* writeable */
.data : { /* Data */ .data : { /* Data */
......
...@@ -90,6 +90,8 @@ SECTIONS ...@@ -90,6 +90,8 @@ SECTIONS
{ *(.rodata) *(.rodata.*) } { *(.rodata) *(.rodata.*) }
.kstrtab : AT(ADDR(.kstrtab) - PAGE_OFFSET) .kstrtab : AT(ADDR(.kstrtab) - PAGE_OFFSET)
{ *(.kstrtab) } { *(.kstrtab) }
__vermagic : AT(ADDR(__vermagic) - PAGE_OFFSET)
{ *(__vermagic) }
.opd : AT(ADDR(.opd) - PAGE_OFFSET) .opd : AT(ADDR(.opd) - PAGE_OFFSET)
{ *(.opd) } { *(.opd) }
......
/* ld script to make m68k Linux kernel */ /* ld script to make m68k Linux kernel */
#include <asm-generic/vmlinux.lds.h>
OUTPUT_FORMAT("elf32-m68k", "elf32-m68k", "elf32-m68k") OUTPUT_FORMAT("elf32-m68k", "elf32-m68k", "elf32-m68k")
OUTPUT_ARCH(m68k) OUTPUT_ARCH(m68k)
ENTRY(_start) ENTRY(_start)
...@@ -12,21 +15,13 @@ SECTIONS ...@@ -12,21 +15,13 @@ SECTIONS
*(.fixup) *(.fixup)
*(.gnu.warning) *(.gnu.warning)
} = 0x4e75 } = 0x4e75
.rodata : { *(.rodata) *(.rodata.*) }
.kstrtab : { *(.kstrtab) }
. = ALIGN(16); /* Exception table */ . = ALIGN(16); /* Exception table */
__start___ex_table = .; __start___ex_table = .;
__ex_table : { *(__ex_table) } __ex_table : { *(__ex_table) }
__stop___ex_table = .; __stop___ex_table = .;
__start___ksymtab = .; /* Kernel symbol table */ RODATA
__ksymtab : { *(__ksymtab) }
__stop___ksymtab = .;
__start___gpl_ksymtab = .; /* Kernel symbol table: GPL only */
__gpl_ksymtab : { *(__gpl_ksymtab) }
__stop___gpl_ksymtab = .;
_etext = .; /* End of text section */ _etext = .; /* End of text section */
......
/* ld script to make m68k Linux kernel */ /* ld script to make m68k Linux kernel */
#include <asm-generic/vmlinux.lds.h>
OUTPUT_FORMAT("elf32-m68k", "elf32-m68k", "elf32-m68k") OUTPUT_FORMAT("elf32-m68k", "elf32-m68k", "elf32-m68k")
OUTPUT_ARCH(m68k) OUTPUT_ARCH(m68k)
ENTRY(_start) ENTRY(_start)
...@@ -13,26 +16,16 @@ SECTIONS ...@@ -13,26 +16,16 @@ SECTIONS
*(.fixup) *(.fixup)
*(.gnu.warning) *(.gnu.warning)
} = 0x4e75 } = 0x4e75
.kstrtab : { *(.kstrtab) }
_etext = .; /* End of text section */ _etext = .; /* End of text section */
.data : { /* Data */ .data : { /* Data */
*(.rodata) RODATA
*(.rodata.*)
*(.data)
CONSTRUCTORS CONSTRUCTORS
. = ALIGN(16); /* Exception table */ . = ALIGN(16); /* Exception table */
__start___ex_table = .; __start___ex_table = .;
*(__ex_table) *(__ex_table)
__stop___ex_table = .; __stop___ex_table = .;
__start___ksymtab = .; /* Kernel symbol table */
*(__ksymtab)
__stop___ksymtab = .;
__start___gpl_ksymtab = .; /* Kernel symbol table: GPL-only */
__gpl_ksymtab : { *(__gpl_ksymtab) }
__stop___gpl_ksymtab = .;
} }
/* End of data goes *here* so that freeing init code works properly. */ /* End of data goes *here* so that freeing init code works properly. */
_edata = .; _edata = .;
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
*/ */
#include <linux/config.h> #include <linux/config.h>
#include <asm-generic/vmlinux.lds.h>
/* /*
* Original Palm pilot (same for Xcopilot). * Original Palm pilot (same for Xcopilot).
...@@ -219,20 +220,13 @@ SECTIONS { ...@@ -219,20 +220,13 @@ SECTIONS {
_stext = . ; _stext = . ;
*(.text) *(.text)
*(.text.lock) *(.text.lock)
*(.rodata)
*(.rodata.*)
. = ALIGN(0x4) ;
*(.kstrtab)
. = ALIGN(16); /* Exception table */ . = ALIGN(16); /* Exception table */
__start___ex_table = .; __start___ex_table = .;
*(__ex_table) *(__ex_table)
__stop___ex_table = .; __stop___ex_table = .;
__start___ksymtab = .; /* Kernel symbol table */ RODATA
*(__ksymtab)
__stop___ksymtab = .;
. = ALIGN(4) ; . = ALIGN(4) ;
_etext = . ; _etext = . ;
......
#include <asm-generic/vmlinux.lds.h>
OUTPUT_ARCH(mips) OUTPUT_ARCH(mips)
ENTRY(kernel_entry) ENTRY(kernel_entry)
SECTIONS SECTIONS
...@@ -9,12 +11,9 @@ SECTIONS ...@@ -9,12 +11,9 @@ SECTIONS
{ {
_ftext = . ; _ftext = . ;
*(.text) *(.text)
*(.rodata)
*(.rodata1)
/* .gnu.warning sections are handled specially by elf32.em. */ /* .gnu.warning sections are handled specially by elf32.em. */
*(.gnu.warning) *(.gnu.warning)
} =0 } =0
.kstrtab : { *(.kstrtab) }
. = ALIGN(16); /* Exception table */ . = ALIGN(16); /* Exception table */
__start___ex_table = .; __start___ex_table = .;
...@@ -25,13 +24,7 @@ SECTIONS ...@@ -25,13 +24,7 @@ SECTIONS
__dbe_table : { *(__dbe_table) } __dbe_table : { *(__dbe_table) }
__stop___dbe_table = .; __stop___dbe_table = .;
__start___ksymtab = .; /* Kernel symbol table */ RODATA
__ksymtab : { *(__ksymtab) }
__stop___ksymtab = .;
__start___gpl_ksymtab = .; /* Kernel symbol table: GPL-only symbols */
__gpl_ksymtab : { *(__gpl_ksymtab) }
__stop___gpl_ksymtab = .;
_etext = .; _etext = .;
......
...@@ -25,6 +25,7 @@ SECTIONS ...@@ -25,6 +25,7 @@ SECTIONS
*(.gnu.warning) *(.gnu.warning)
} = 0 } = 0
.kstrtab : { *(.kstrtab) } .kstrtab : { *(.kstrtab) }
__vermagic : { *(__vermagic) }
. = ALIGN(16); /* Exception table */ . = ALIGN(16); /* Exception table */
__start___ex_table = .; __start___ex_table = .;
......
#include <asm-generic/vmlinux.lds.h>
OUTPUT_ARCH(mips) OUTPUT_ARCH(mips)
ENTRY(kernel_entry) ENTRY(kernel_entry)
SECTIONS SECTIONS
...@@ -7,13 +9,9 @@ SECTIONS ...@@ -7,13 +9,9 @@ SECTIONS
.text : .text :
{ {
*(.text) *(.text)
*(.rodata)
*(.rodata.*)
*(.rodata1)
/* .gnu.warning sections are handled specially by elf32.em. */ /* .gnu.warning sections are handled specially by elf32.em. */
*(.gnu.warning) *(.gnu.warning)
} =0 } =0
.kstrtab : { *(.kstrtab) }
. = ALIGN(16); /* Exception table */ . = ALIGN(16); /* Exception table */
__start___ex_table = .; __start___ex_table = .;
...@@ -24,6 +22,8 @@ SECTIONS ...@@ -24,6 +22,8 @@ SECTIONS
__dbe_table : { *(__dbe_table) } __dbe_table : { *(__dbe_table) }
__stop___dbe_table = .; __stop___dbe_table = .;
RODATA
_etext = .; _etext = .;
. = ALIGN(16384); . = ALIGN(16384);
......
#include <linux/config.h> #include <linux/config.h>
#include <asm-generic/vmlinux.lds.h>
/* ld script to make hppa Linux kernel */ /* ld script to make hppa Linux kernel */
#ifndef CONFIG_PARISC64 #ifndef CONFIG_PARISC64
...@@ -31,31 +32,17 @@ SECTIONS ...@@ -31,31 +32,17 @@ SECTIONS
_etext = .; /* End of text section */ _etext = .; /* End of text section */
. = ALIGN(16);
.rodata : { *(.rodata) *(.rodata.*) }
.kstrtab : { *(.kstrtab) }
.data BLOCK(8192) : { /* Data without special */
data_start = .;
*(.data)
}
. = ALIGN(16); /* Exception table */ . = ALIGN(16); /* Exception table */
__start___ex_table = .; __start___ex_table = .;
__ex_table : { *(__ex_table) } __ex_table : { *(__ex_table) }
__stop___ex_table = .; __stop___ex_table = .;
__start___ksymtab = .; /* Kernel symbol table */ RODATA
__ksymtab : { *(__ksymtab) }
__stop___ksymtab = .;
__start___gpl_ksymtab = .; /* Kernel symbol table: GPL-only symbols */
__gpl_ksymtab : { *(__gpl_ksymtab) }
__stop___gpl_ksymtab = .;
__start___kallsyms = .; /* All kernel symbols */ .data BLOCK(8192) : { /* Data without special */
__kallsyms : { *(__kallsyms) } data_start = .;
__stop___kallsyms = .; *(.data)
}
#ifdef CONFIG_PARISC64 #ifdef CONFIG_PARISC64
. = ALIGN(16); /* Linkage tables */ . = ALIGN(16); /* Linkage tables */
......
#include <asm-generic/vmlinux.lds.h>
OUTPUT_ARCH(powerpc) OUTPUT_ARCH(powerpc)
SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/usr/local/powerpc-any-elf/lib); SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/usr/local/powerpc-any-elf/lib);
/* Do we need any of these for elf? /* Do we need any of these for elf?
...@@ -40,13 +42,8 @@ SECTIONS ...@@ -40,13 +42,8 @@ SECTIONS
} }
_etext = .; _etext = .;
PROVIDE (etext = .); PROVIDE (etext = .);
.rodata :
{ RODATA
*(.rodata)
*(.rodata.*)
*(.rodata1)
}
.kstrtab : { *(.kstrtab) }
.fini : { *(.fini) } =0 .fini : { *(.fini) } =0
.ctors : { *(.ctors) } .ctors : { *(.ctors) }
.dtors : { *(.dtors) } .dtors : { *(.dtors) }
...@@ -57,18 +54,6 @@ SECTIONS ...@@ -57,18 +54,6 @@ SECTIONS
__ex_table : { *(__ex_table) } __ex_table : { *(__ex_table) }
__stop___ex_table = .; __stop___ex_table = .;
__start___ksymtab = .; /* Kernel symbol table */
__ksymtab : { *(__ksymtab) }
__stop___ksymtab = .;
__start___gpl_ksymtab = .; /* Kernel symbol table: GPL-only symbols */
__gpl_ksymtab : { *(__gpl_ksymtab) }
__stop___gpl_ksymtab = .;
__start___kallsyms = .; /* All kernel symbols */
__kallsyms : { *(__kallsyms) }
__stop___kallsyms = .;
/* Read-write section, merged into data segment: */ /* Read-write section, merged into data segment: */
. = ALIGN(4096); . = ALIGN(4096);
.data : .data :
......
...@@ -42,6 +42,7 @@ SECTIONS ...@@ -42,6 +42,7 @@ SECTIONS
*(.rodata1) *(.rodata1)
} }
.kstrtab : { *(.kstrtab) } .kstrtab : { *(.kstrtab) }
__vermagic : { *(__vermagic) }
.fini : { *(.fini) } =0 .fini : { *(.fini) } =0
.ctors : { *(.ctors) } .ctors : { *(.ctors) }
.dtors : { *(.dtors) } .dtors : { *(.dtors) }
......
#include <asm-generic/vmlinux.lds.h>
OUTPUT_ARCH(powerpc:common64) OUTPUT_ARCH(powerpc:common64)
/* Do we need any of these for elf? /* Do we need any of these for elf?
__DYNAMIC = 0; */ __DYNAMIC = 0; */
...@@ -37,11 +39,9 @@ SECTIONS ...@@ -37,11 +39,9 @@ SECTIONS
. = ALIGN(4096); . = ALIGN(4096);
_etext = .; _etext = .;
PROVIDE (etext = .); PROVIDE (etext = .);
.rodata :
{ RODATA
*(.rodata)
*(.rodata1)
}
.fini : { *(.fini) } =0 .fini : { *(.fini) } =0
.ctors : { *(.ctors) } .ctors : { *(.ctors) }
.dtors : { *(.dtors) } .dtors : { *(.dtors) }
...@@ -65,18 +65,6 @@ SECTIONS ...@@ -65,18 +65,6 @@ SECTIONS
__ex_table : { *(__ex_table) } __ex_table : { *(__ex_table) }
__stop___ex_table = .; __stop___ex_table = .;
__start___ksymtab = .; /* Kernel symbol table */
__ksymtab : { *(__ksymtab) }
__stop___ksymtab = .;
__start___gpl_ksymtab = .; /* Kernel symbol table: GPL-only symbols */
__gpl_ksymtab : { *(__gpl_ksymtab) }
__stop___gpl_ksymtab = .;
__start___kallsyms = .; /* All kernel symbols */
__kallsyms : { *(__kallsyms) }
__stop___kallsyms = .;
. = ALIGN(16384); /* init_task */ . = ALIGN(16384); /* init_task */
.data.init_task : { *(.data.init_task) } .data.init_task : { *(.data.init_task) }
......
/* ld script to make s390 Linux kernel /* ld script to make s390 Linux kernel
* Written by Martin Schwidefsky (schwidefsky@de.ibm.com) * Written by Martin Schwidefsky (schwidefsky@de.ibm.com)
*/ */
#include <asm-generic/vmlinux.lds.h>
OUTPUT_FORMAT("elf32-s390", "elf32-s390", "elf32-s390") OUTPUT_FORMAT("elf32-s390", "elf32-s390", "elf32-s390")
OUTPUT_ARCH(s390) OUTPUT_ARCH(s390)
ENTRY(_start) ENTRY(_start)
...@@ -17,22 +20,12 @@ SECTIONS ...@@ -17,22 +20,12 @@ SECTIONS
_etext = .; /* End of text section */ _etext = .; /* End of text section */
.rodata : { *(.rodata) *(.rodata.*) }
.kstrtab : { *(.kstrtab) }
. = ALIGN(16); /* Exception table */ . = ALIGN(16); /* Exception table */
__start___ex_table = .; __start___ex_table = .;
__ex_table : { *(__ex_table) } __ex_table : { *(__ex_table) }
__stop___ex_table = .; __stop___ex_table = .;
. = ALIGN(64); RODATA
__start___ksymtab = .; /* Kernel symbol table */
__ksymtab : { *(__ksymtab) }
__stop___ksymtab = .;
__start___gpl_ksymtab = .; /* Kernel symbol table: GPL-only symbols */
__gpl_ksymtab : { *(__gpl_ksymtab) }
__stop___gpl_ksymtab = .;
#ifdef CONFIG_SHARED_KERNEL #ifdef CONFIG_SHARED_KERNEL
. = ALIGN(1048576); /* VM shared segments are 1MB aligned */ . = ALIGN(1048576); /* VM shared segments are 1MB aligned */
......
/* /*
* Written by Martin Schwidefsky (schwidefsky@de.ibm.com) * Written by Martin Schwidefsky (schwidefsky@de.ibm.com)
*/ */
#include <asm-generic/vmlinux.lds.h>
OUTPUT_FORMAT("elf64-s390", "elf64-s390", "elf64-s390") OUTPUT_FORMAT("elf64-s390", "elf64-s390", "elf64-s390")
OUTPUT_ARCH(s390:64-bit) OUTPUT_ARCH(s390:64-bit)
ENTRY(_start) ENTRY(_start)
...@@ -17,22 +20,12 @@ SECTIONS ...@@ -17,22 +20,12 @@ SECTIONS
_etext = .; /* End of text section */ _etext = .; /* End of text section */
.rodata : { *(.rodata) *(.rodata.*) }
.kstrtab : { *(.kstrtab) }
. = ALIGN(16); /* Exception table */ . = ALIGN(16); /* Exception table */
__start___ex_table = .; __start___ex_table = .;
__ex_table : { *(__ex_table) } __ex_table : { *(__ex_table) }
__stop___ex_table = .; __stop___ex_table = .;
. = ALIGN(64); RODATA
__start___ksymtab = .; /* Kernel symbol table */
__ksymtab : { *(__ksymtab) }
__stop___ksymtab = .;
__start___gpl_ksymtab = .; /* Kernel symbol table: GPL-only symbols */
__gpl_ksymtab : { *(__gpl_ksymtab) }
__stop___gpl_ksymtab = .;
#ifdef CONFIG_SHARED_KERNEL #ifdef CONFIG_SHARED_KERNEL
. = ALIGN(1048576); /* VM shared segments are 1MB aligned */ . = ALIGN(1048576); /* VM shared segments are 1MB aligned */
......
...@@ -3,6 +3,8 @@ ...@@ -3,6 +3,8 @@
* Written by Niibe Yutaka * Written by Niibe Yutaka
*/ */
#include <linux/config.h> #include <linux/config.h>
#include <asm-generic/vmlinux.lds.h>
#ifdef CONFIG_CPU_LITTLE_ENDIAN #ifdef CONFIG_CPU_LITTLE_ENDIAN
OUTPUT_FORMAT("elf32-sh-linux", "elf32-sh-linux", "elf32-sh-linux") OUTPUT_FORMAT("elf32-sh-linux", "elf32-sh-linux", "elf32-sh-linux")
jiffies = jiffies_64; jiffies = jiffies_64;
...@@ -25,25 +27,13 @@ SECTIONS ...@@ -25,25 +27,13 @@ SECTIONS
*(.fixup) *(.fixup)
*(.gnu.warning) *(.gnu.warning)
} = 0x0009 } = 0x0009
.rodata : { *(.rodata) *(.rodata.*) }
.kstrtab : { *(.kstrtab) }
. = ALIGN(16); /* Exception table */ . = ALIGN(16); /* Exception table */
__start___ex_table = .; __start___ex_table = .;
__ex_table : { *(__ex_table) } __ex_table : { *(__ex_table) }
__stop___ex_table = .; __stop___ex_table = .;
__start___ksymtab = .; /* Kernel symbol table */ RODATA
__ksymtab : { *(__ksymtab) }
__stop___ksymtab = .;
__start___gpl_ksymtab = .; /* Kernel symbol table: GPL-only symbols */
__gpl_ksymtab : { *(__gpl_ksymtab) }
__stop___gpl_ksymtab = .;
__start___kallsyms = .; /* All kernel symbols */
__kallsyms : { *(__kallsyms) }
__stop___kallsyms = .;
_etext = .; /* End of text section */ _etext = .; /* End of text section */
......
/* ld script to make SparcLinux kernel */ /* ld script to make SparcLinux kernel */
#include <asm-generic/vmlinux.lds.h>
OUTPUT_FORMAT("elf32-sparc", "elf32-sparc", "elf32-sparc") OUTPUT_FORMAT("elf32-sparc", "elf32-sparc", "elf32-sparc")
OUTPUT_ARCH(sparc) OUTPUT_ARCH(sparc)
ENTRY(_start) ENTRY(_start)
...@@ -13,8 +16,7 @@ SECTIONS ...@@ -13,8 +16,7 @@ SECTIONS
} =0 } =0
_etext = .; _etext = .;
PROVIDE (etext = .); PROVIDE (etext = .);
.rodata : { *(.rodata) *(.rodata.*) } RODATA
.rodata1 : { *(.rodata1) }
.data : .data :
{ {
*(.data) *(.data)
...@@ -30,19 +32,6 @@ SECTIONS ...@@ -30,19 +32,6 @@ SECTIONS
__ex_table : { *(__ex_table) } __ex_table : { *(__ex_table) }
__stop___ex_table = .; __stop___ex_table = .;
. = ALIGN(64);
__start___ksymtab = .;
__ksymtab : { *(__ksymtab) }
__stop___ksymtab = .;
__start___gpl_ksymtab = .;
__gpl_ksymtab : { *(__gpl_ksymtab) }
__stop___gpl_ksymtab = .;
__start___kallsyms = .; /* All kernel symbols */
__kallsyms : { *(__kallsyms) }
__stop___kallsyms = .;
. = ALIGN(4096); . = ALIGN(4096);
__init_begin = .; __init_begin = .;
.init.text : { *(.init.text) } .init.text : { *(.init.text) }
......
/* ld script to make UltraLinux kernel */ /* ld script to make UltraLinux kernel */
#include <asm-generic/vmlinux.lds.h>
OUTPUT_FORMAT("elf64-sparc", "elf64-sparc", "elf64-sparc") OUTPUT_FORMAT("elf64-sparc", "elf64-sparc", "elf64-sparc")
OUTPUT_ARCH(sparc:v9a) OUTPUT_ARCH(sparc:v9a)
ENTRY(_start) ENTRY(_start)
...@@ -16,8 +19,9 @@ SECTIONS ...@@ -16,8 +19,9 @@ SECTIONS
} =0 } =0
_etext = .; _etext = .;
PROVIDE (etext = .); PROVIDE (etext = .);
.rodata : { *(.rodata) *(.rodata.*) }
.rodata1 : { *(.rodata1) } RODATA
.data : .data :
{ {
*(.data) *(.data)
...@@ -35,17 +39,6 @@ SECTIONS ...@@ -35,17 +39,6 @@ SECTIONS
__ex_table : { *(__ex_table) } __ex_table : { *(__ex_table) }
__stop___ex_table = .; __stop___ex_table = .;
. = ALIGN(64);
__start___ksymtab = .;
__ksymtab : { *(__ksymtab) }
__stop___ksymtab = .;
__start___gpl_ksymtab = .;
__gpl_ksymtab : { *(__gpl_ksymtab) }
__stop___gpl_ksymtab = .;
__kstrtab : { *(.kstrtab) }
__start___kallsyms = .; /* All kernel symbols */
__kallsyms : { *(__kallsyms) }
__stop___kallsyms = .;
. = ALIGN(8192); . = ALIGN(8192);
__init_begin = .; __init_begin = .;
.init.text : { *(.init.text) } .init.text : { *(.init.text) }
......
#include <asm-generic/vmlinux.lds.h>
OUTPUT_FORMAT(ELF_FORMAT) OUTPUT_FORMAT(ELF_FORMAT)
OUTPUT_ARCH(ELF_ARCH) OUTPUT_ARCH(ELF_ARCH)
ENTRY(_start) ENTRY(_start)
...@@ -31,20 +33,15 @@ SECTIONS ...@@ -31,20 +33,15 @@ SECTIONS
*(.gnu.warning) *(.gnu.warning)
*(.gnu.linkonce.t*) *(.gnu.linkonce.t*)
} }
.kstrtab : { *(.kstrtab) }
. = ALIGN(16); /* Exception table */ . = ALIGN(16); /* Exception table */
__start___ex_table = .; __start___ex_table = .;
__ex_table : { *(__ex_table) } __ex_table : { *(__ex_table) }
__stop___ex_table = .; __stop___ex_table = .;
. = ALIGN(64); RODATA
__start___ksymtab = .; /* Kernel symbol table */
__ksymtab : { *(__ksymtab) }
__stop___ksymtab = .;
.fini : { *(.fini) } =0x9090 .fini : { *(.fini) } =0x9090
.rodata : { *(.rodata) *(.gnu.linkonce.r*) }
.rodata1 : { *(.rodata1) }
_etext = .; _etext = .;
PROVIDE (etext = .); PROVIDE (etext = .);
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
*/ */
#include <linux/config.h> #include <linux/config.h>
#include <asm-generic/vmlinux.lds.h>
/* The following macros contain the usual definitions for various data areas. /* The following macros contain the usual definitions for various data areas.
...@@ -38,9 +39,7 @@ ...@@ -38,9 +39,7 @@
*(.text.lock) \ *(.text.lock) \
*(.exitcall.exit) \ *(.exitcall.exit) \
__real_etext = . ; /* There may be data after here. */ \ __real_etext = . ; /* There may be data after here. */ \
*(.rodata) \ RODATA \
. = ALIGN (0x4) ; \
*(.kstrtab) \
. = ALIGN (4) ; \ . = ALIGN (4) ; \
*(.call_table_data) \ *(.call_table_data) \
*(.call_table_text) \ *(.call_table_text) \
...@@ -48,12 +47,6 @@ ...@@ -48,12 +47,6 @@
___start___ex_table = . ; \ ___start___ex_table = . ; \
*(__ex_table) \ *(__ex_table) \
___stop___ex_table = . ; \ ___stop___ex_table = . ; \
___start___ksymtab = . ;/* Kernel symbol table. */ \
*(__ksymtab) \
___stop___ksymtab = . ; \
___start___gpl_ksymtab = . ; /* Same for GPL symbols. */ \
*(__gpl_ksymtab) \
___stop___gpl_ksymtab = . ; \
. = ALIGN (4) ; \ . = ALIGN (4) ; \
__etext = . ; __etext = . ;
......
/* ld script to make x86-64 Linux kernel /* ld script to make x86-64 Linux kernel
* Written by Martin Mares <mj@atrey.karlin.mff.cuni.cz>; * Written by Martin Mares <mj@atrey.karlin.mff.cuni.cz>;
*/ */
#include <asm-generic/vmlinux.lds.h>
OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64") OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64")
OUTPUT_ARCH(i386:x86-64) OUTPUT_ARCH(i386:x86-64)
ENTRY(_start) ENTRY(_start)
...@@ -18,25 +21,12 @@ SECTIONS ...@@ -18,25 +21,12 @@ SECTIONS
_etext = .; /* End of text section */ _etext = .; /* End of text section */
.rodata : { *(.rodata) *(.rodata.*) }
.kstrtab : { *(.kstrtab) }
. = ALIGN(16); /* Exception table */ . = ALIGN(16); /* Exception table */
__start___ex_table = .; __start___ex_table = .;
__ex_table : { *(__ex_table) } __ex_table : { *(__ex_table) }
__stop___ex_table = .; __stop___ex_table = .;
. = ALIGN(64); RODATA
__start___ksymtab = .; /* Kernel symbol table */
__ksymtab : { *(__ksymtab) }
__stop___ksymtab = .;
__start___gpl_ksymtab = .; /* Kernel symbol table: GPL-only symbols */
__gpl_ksymtab : { *(__gpl_ksymtab) }
__stop___gpl_ksymtab = .;
__start___kallsyms = .; /* All kernel symbols */
__kallsyms : { *(__kallsyms) }
__stop___kallsyms = .;
.data : { /* Data */ .data : { /* Data */
*(.data) *(.data)
......
...@@ -2138,7 +2138,7 @@ request_mmio(struct resources *rs, unsigned long start, int len, ...@@ -2138,7 +2138,7 @@ request_mmio(struct resources *rs, unsigned long start, int len,
} }
void void
hisax_resources_release(struct IsdnCardState *cs) hisax_release_resources(struct IsdnCardState *cs)
{ {
resources_release(&cs->rs); resources_release(&cs->rs);
} }
......
...@@ -58,7 +58,7 @@ static struct pci_device_id fcpci_ids[] __devinitdata = { ...@@ -58,7 +58,7 @@ static struct pci_device_id fcpci_ids[] __devinitdata = {
}; };
MODULE_DEVICE_TABLE(pci, fcpci_ids); MODULE_DEVICE_TABLE(pci, fcpci_ids);
static struct pnp_card_id fcpnp_ids[] __devinitdata = { static struct pnp_card_device_id fcpnp_ids[] __devinitdata = {
{ .id = "AVM0900", { .id = "AVM0900",
.driver_data = (unsigned long) "Fritz!Card PnP", .driver_data = (unsigned long) "Fritz!Card PnP",
.devs = { { "AVM0900" } } } .devs = { { "AVM0900" } } }
......
...@@ -241,7 +241,7 @@ ippp_ccp_alloc(void) ...@@ -241,7 +241,7 @@ ippp_ccp_alloc(void)
struct ippp_ccp *ccp; struct ippp_ccp *ccp;
ccp = kmalloc(sizeof(*ccp), GFP_ATOMIC); // FIXME ccp = kmalloc(sizeof(*ccp), GFP_ATOMIC); // FIXME
if (!cpp) if (!ccp)
return NULL; return NULL;
memset(ccp, 0, sizeof(*ccp)); memset(ccp, 0, sizeof(*ccp));
ccp->mru = 1524; /* MRU, default 1524 */ ccp->mru = 1524; /* MRU, default 1524 */
......
...@@ -8,27 +8,3 @@ obj-$(CONFIG_DEVFS_FS) += devfs.o ...@@ -8,27 +8,3 @@ obj-$(CONFIG_DEVFS_FS) += devfs.o
devfs-objs := base.o util.o devfs-objs := base.o util.o
# Special case to support building documentation
ifndef TOPDIR
TOPDIR = ../..
endif
# Rule to build documentation
doc: base.c util.c
@echo '$$PACKAGE devfs' > devfs.doc
@echo '$$NAME Linux Kernel' >> devfs.doc
@echo '$$SUMMARY devfs (Device FileSystem) functions' >> devfs.doc
@echo '$$SYNOPSIS "#include <linux/devfs_fs.h>"' >> devfs.doc
@echo '$$END' >> devfs.doc
c2doc base.c util.c >> devfs.doc
karma_doc2man -section 9 devfs.doc .
rm devfs.doc
gzip --best *.9
mv *.9.gz /usr/man/man9
# Rule for test compiling
test:
gcc -o /tmp/base.o -D__KERNEL__ -I../../include -Wall \
-Wstrict-prototypes -O2 -fomit-frame-pointer -pipe \
-fno-strength-reduce -DEXPORT_SYMTAB -c base.c
...@@ -180,7 +180,7 @@ static int __init init_devpts_fs(void) ...@@ -180,7 +180,7 @@ static int __init init_devpts_fs(void)
static void __exit exit_devpts_fs(void) static void __exit exit_devpts_fs(void)
{ {
unregister_filesystem(&devpts_fs_type); unregister_filesystem(&devpts_fs_type);
kern_umount(devpts_mnt); mntput(devpts_mnt);
} }
module_init(init_devpts_fs) module_init(init_devpts_fs)
......
#define RODATA \
.rodata : { *(.rodata) *(.rodata.*) *(.rodata1) } \
.rodata1 : { *(.rodata1) } \
\
.kstrtab : { *(.kstrtab) } \
\
/* Kernel version magic */ \
__vermagic : { *(__vermagic) } \
\
/* Kernel symbol table */ \
. = ALIGN(64); \
__start___ksymtab = .; \
__ksymtab : { *(__ksymtab) } \
__stop___ksymtab = .; \
\
/* Kernel symbol table: GPL-only symbols */ \
__start___gpl_ksymtab = .; \
__gpl_ksymtab : { *(__gpl_ksymtab) } \
__stop___gpl_ksymtab = .; \
\
/* All kernel symbols */ \
__start___kallsyms = .; \
__kallsyms : { *(__kallsyms) } \
__stop___kallsyms = .; \
...@@ -11,8 +11,13 @@ ...@@ -11,8 +11,13 @@
#define APIC_DEFAULT_PHYS_BASE 0xfee00000 #define APIC_DEFAULT_PHYS_BASE 0xfee00000
#define APIC_ID 0x20 #define APIC_ID 0x20
#define APIC_ID_MASK (0x0F<<24) #ifdef CONFIG_X86_SUMMIT
#define GET_APIC_ID(x) (((x)>>24)&0x0F) #define APIC_ID_MASK (0xFF<<24)
#define GET_APIC_ID(x) (((x)>>24)&0xFF)
#else
#define APIC_ID_MASK (0x0F<<24)
#define GET_APIC_ID(x) (((x)>>24)&0x0F)
#endif
#define APIC_LVR 0x30 #define APIC_LVR 0x30
#define APIC_LVR_MASK 0xFF00FF #define APIC_LVR_MASK 0xFF00FF
#define GET_APIC_VERSION(x) ((x)&0xFF) #define GET_APIC_VERSION(x) ((x)&0xFF)
......
...@@ -21,8 +21,12 @@ static inline int apic_id_registered(void) ...@@ -21,8 +21,12 @@ static inline int apic_id_registered(void)
#define APIC_DFR_VALUE (APIC_DFR_CLUSTER) #define APIC_DFR_VALUE (APIC_DFR_CLUSTER)
#define TARGET_CPUS ((cpu_online_map < 0xf)?cpu_online_map:0xf) #define TARGET_CPUS ((cpu_online_map < 0xf)?cpu_online_map:0xf)
#define INT_DELIVERY_MODE dest_LowestPrio
#define INT_DEST_MODE 1 /* logical delivery broadcast to all procs */
#define APIC_BROADCAST_ID (0x0f) #define APIC_BROADCAST_ID (0x0f)
#define check_apicid_used(bitmap, apicid) (0) #define check_apicid_used(bitmap, apicid) (0)
#define check_apicid_present(bit) (phys_cpu_present_map & (1 << bit))
static inline unsigned long calculate_ldr(unsigned long old) static inline unsigned long calculate_ldr(unsigned long old)
{ {
...@@ -64,11 +68,11 @@ static inline int apicid_to_node(int logical_apicid) ...@@ -64,11 +68,11 @@ static inline int apicid_to_node(int logical_apicid)
return 0; return 0;
} }
extern u8 raw_phys_apicid[]; extern u8 bios_cpu_apicid[];
static inline int cpu_present_to_apicid(int mps_cpu) static inline int cpu_present_to_apicid(int mps_cpu)
{ {
return (int) raw_phys_apicid[mps_cpu]; return (int) bios_cpu_apicid[mps_cpu];
} }
static inline unsigned long apicid_to_cpu_present(int phys_apicid) static inline unsigned long apicid_to_cpu_present(int phys_apicid)
...@@ -76,6 +80,13 @@ static inline unsigned long apicid_to_cpu_present(int phys_apicid) ...@@ -76,6 +80,13 @@ static inline unsigned long apicid_to_cpu_present(int phys_apicid)
return (1ul << phys_apicid); return (1ul << phys_apicid);
} }
extern volatile u8 cpu_2_logical_apicid[];
/* Mapping from cpu number to logical apicid */
static inline int cpu_to_logical_apicid(int cpu)
{
return (int)cpu_2_logical_apicid[cpu];
}
static inline int mpc_apic_id(struct mpc_config_processor *m, int quad) static inline int mpc_apic_id(struct mpc_config_processor *m, int quad)
{ {
printk("Processor #%d %ld:%ld APIC version %d\n", printk("Processor #%d %ld:%ld APIC version %d\n",
......
...@@ -12,8 +12,12 @@ ...@@ -12,8 +12,12 @@
#define no_balance_irq (0) #define no_balance_irq (0)
#define esr_disable (0) #define esr_disable (0)
#define INT_DELIVERY_MODE dest_LowestPrio
#define INT_DEST_MODE 1 /* logical delivery broadcast to all procs */
#define APIC_BROADCAST_ID 0x0F #define APIC_BROADCAST_ID 0x0F
#define check_apicid_used(bitmap, apicid) (bitmap & (1 << apicid)) #define check_apicid_used(bitmap, apicid) (bitmap & (1 << apicid))
#define check_apicid_present(bit) (phys_cpu_present_map & (1 << bit))
static inline int apic_id_registered(void) static inline int apic_id_registered(void)
{ {
...@@ -59,6 +63,12 @@ static inline int apicid_to_node(int logical_apicid) ...@@ -59,6 +63,12 @@ static inline int apicid_to_node(int logical_apicid)
return 0; return 0;
} }
/* Mapping from cpu number to logical apicid */
static inline int cpu_to_logical_apicid(int cpu)
{
return 1 << cpu;
}
static inline int cpu_present_to_apicid(int mps_cpu) static inline int cpu_present_to_apicid(int mps_cpu)
{ {
return mps_cpu; return mps_cpu;
......
...@@ -17,4 +17,10 @@ static inline void mps_oem_check(struct mp_config_table *mpc, char *oem, ...@@ -17,4 +17,10 @@ static inline void mps_oem_check(struct mp_config_table *mpc, char *oem,
{ {
} }
/* Hook from generic ACPI tables.c */
static inline void acpi_madt_oem_check(char *oem_id, char *oem_table_id)
{
}
#endif /* __ASM_MACH_MPPARSE_H */ #endif /* __ASM_MACH_MPPARSE_H */
...@@ -8,8 +8,12 @@ ...@@ -8,8 +8,12 @@
#define no_balance_irq (1) #define no_balance_irq (1)
#define esr_disable (1) #define esr_disable (1)
#define INT_DELIVERY_MODE dest_LowestPrio
#define INT_DEST_MODE 0 /* physical delivery on LOCAL quad */
#define APIC_BROADCAST_ID 0x0F #define APIC_BROADCAST_ID 0x0F
#define check_apicid_used(bitmap, apicid) ((bitmap) & (1 << (apicid))) #define check_apicid_used(bitmap, apicid) ((bitmap) & (1 << (apicid)))
#define check_apicid_present(bit) (phys_cpu_present_map & (1 << bit))
static inline int apic_id_registered(void) static inline int apic_id_registered(void)
{ {
...@@ -42,6 +46,13 @@ static inline ulong ioapic_phys_id_map(ulong phys_map) ...@@ -42,6 +46,13 @@ static inline ulong ioapic_phys_id_map(ulong phys_map)
return 0xf; return 0xf;
} }
/* Mapping from cpu number to logical apicid */
extern volatile u8 cpu_2_logical_apicid[];
static inline int cpu_to_logical_apicid(int cpu)
{
return (int)cpu_2_logical_apicid[cpu];
}
static inline int cpu_present_to_apicid(int mps_cpu) static inline int cpu_present_to_apicid(int mps_cpu)
{ {
return ( ((mps_cpu/4)*16) + (1<<(mps_cpu%4)) ); return ( ((mps_cpu/4)*16) + (1<<(mps_cpu%4)) );
......
...@@ -34,4 +34,9 @@ static inline void mps_oem_check(struct mp_config_table *mpc, char *oem, ...@@ -34,4 +34,9 @@ static inline void mps_oem_check(struct mp_config_table *mpc, char *oem,
mpc->mpc_oemsize); mpc->mpc_oemsize);
} }
/* Hook from generic ACPI tables.c */
static inline void acpi_madt_oem_check(char *oem_id, char *oem_table_id)
{
}
#endif /* __ASM_MACH_MPPARSE_H */ #endif /* __ASM_MACH_MPPARSE_H */
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
extern int x86_summit; extern int x86_summit;
#define esr_disable (1) #define esr_disable (1)
#define no_balance_irq (0)
#define XAPIC_DEST_CPUS_MASK 0x0Fu #define XAPIC_DEST_CPUS_MASK 0x0Fu
#define XAPIC_DEST_CLUSTER_MASK 0xF0u #define XAPIC_DEST_CLUSTER_MASK 0xF0u
...@@ -11,22 +12,43 @@ extern int x86_summit; ...@@ -11,22 +12,43 @@ extern int x86_summit;
#define xapic_phys_to_log_apicid(phys_apic) ( (1ul << ((phys_apic) & 0x3)) |\ #define xapic_phys_to_log_apicid(phys_apic) ( (1ul << ((phys_apic) & 0x3)) |\
((phys_apic) & XAPIC_DEST_CLUSTER_MASK) ) ((phys_apic) & XAPIC_DEST_CLUSTER_MASK) )
static inline unsigned long calculate_ldr(unsigned long old) #define APIC_DFR_VALUE (x86_summit ? APIC_DFR_CLUSTER : APIC_DFR_FLAT)
#define TARGET_CPUS (x86_summit ? XAPIC_DEST_CPUS_MASK : cpu_online_map)
#define INT_DELIVERY_MODE dest_Fixed
#define INT_DEST_MODE 1 /* logical delivery broadcast to all procs */
#define APIC_BROADCAST_ID (x86_summit ? 0xFF : 0x0F)
#define check_apicid_used(bitmap, apicid) (0)
/* we don't use the phys_cpu_present_map to indicate apicid presence */
#define check_apicid_present(bit) (1)
extern u8 bios_cpu_apicid[];
static inline void init_apic_ldr(void)
{ {
unsigned long id; unsigned long val, id;
if (x86_summit) if (x86_summit)
id = xapic_phys_to_log_apicid(hard_smp_processor_id()); id = xapic_phys_to_log_apicid(hard_smp_processor_id());
else else
id = 1UL << smp_processor_id(); id = 1UL << smp_processor_id();
return ((old & ~APIC_LDR_MASK) | SET_APIC_LOGICAL_ID(id)); apic_write_around(APIC_DFR, APIC_DFR_VALUE);
val = apic_read(APIC_LDR) & ~APIC_LDR_MASK;
val |= SET_APIC_LOGICAL_ID(id);
apic_write_around(APIC_LDR, val);
} }
#define APIC_DFR_VALUE (x86_summit ? APIC_DFR_CLUSTER : APIC_DFR_FLAT) static inline int multi_timer_check(int apic, int irq)
#define TARGET_CPUS (x86_summit ? XAPIC_DEST_CPUS_MASK : cpu_online_map) {
return 0;
}
#define APIC_BROADCAST_ID (x86_summit ? 0xFF : 0x0F) static inline int apic_id_registered(void)
#define check_apicid_used(bitmap, apicid) (0) {
return 1;
}
static inline void clustered_apic_check(void) static inline void clustered_apic_check(void)
{ {
...@@ -39,10 +61,17 @@ static inline int apicid_to_node(int logical_apicid) ...@@ -39,10 +61,17 @@ static inline int apicid_to_node(int logical_apicid)
return (logical_apicid >> 5); /* 2 clusterids per CEC */ return (logical_apicid >> 5); /* 2 clusterids per CEC */
} }
/* Mapping from cpu number to logical apicid */
extern volatile u8 cpu_2_logical_apicid[];
static inline int cpu_to_logical_apicid(int cpu)
{
return (int)cpu_2_logical_apicid[cpu];
}
static inline int cpu_present_to_apicid(int mps_cpu) static inline int cpu_present_to_apicid(int mps_cpu)
{ {
if (x86_summit) if (x86_summit)
return (int) raw_phys_apicid[mps_cpu]; return (int) bios_cpu_apicid[mps_cpu];
else else
return mps_cpu; return mps_cpu;
} }
...@@ -53,14 +82,24 @@ static inline ulong ioapic_phys_id_map(ulong phys_map) ...@@ -53,14 +82,24 @@ static inline ulong ioapic_phys_id_map(ulong phys_map)
return (x86_summit ? 0x0F : phys_map); return (x86_summit ? 0x0F : phys_map);
} }
static inline unsigned long apicid_to_phys_cpu_present(int apicid) static inline unsigned long apicid_to_cpu_present(int apicid)
{ {
if (x86_summit) if (x86_summit)
return (1ul << (((apicid >> 4) << 2) | (apicid & 0x3))); return 1;
else else
return (1ul << apicid); return (1ul << apicid);
} }
static inline int mpc_apic_id(struct mpc_config_processor *m, int quad)
{
printk("Processor #%d %ld:%ld APIC version %d\n",
m->mpc_apicid,
(m->mpc_cpufeature & CPU_FAMILY_MASK) >> 8,
(m->mpc_cpufeature & CPU_MODEL_MASK) >> 4,
m->mpc_apicver);
return (m->mpc_apicid);
}
static inline void setup_portio_remap(void) static inline void setup_portio_remap(void)
{ {
} }
......
...@@ -15,8 +15,16 @@ static inline void mpc_oem_pci_bus(struct mpc_config_bus *m, ...@@ -15,8 +15,16 @@ static inline void mpc_oem_pci_bus(struct mpc_config_bus *m,
static inline void mps_oem_check(struct mp_config_table *mpc, char *oem, static inline void mps_oem_check(struct mp_config_table *mpc, char *oem,
char *productid) char *productid)
{ {
if (!strncmp(oem, "IBM ENSW", 8) && !strncmp(str, "VIGIL SMP", 9)) if (!strncmp(oem, "IBM ENSW", 8) &&
(!strncmp(productid, "VIGIL SMP", 9)
|| !strncmp(productid, "RUTHLESS SMP", 12)))
x86_summit = 1; x86_summit = 1;
} }
/* Hook from generic ACPI tables.c */
static inline void acpi_madt_oem_check(char *oem_id, char *oem_table_id)
{
if (!strncmp(oem_id, "IBM", 3) && !strncmp(oem_table_id, "SERVIGIL", 8))
x86_summit = 1;
}
#endif /* __ASM_MACH_MPPARSE_H */ #endif /* __ASM_MACH_MPPARSE_H */
#ifndef _ASM_I386_MODULE_H #ifndef _ASM_I386_MODULE_H
#define _ASM_I386_MODULE_H #define _ASM_I386_MODULE_H
/* x86 is simple */ /* x86 is simple */
struct mod_arch_specific struct mod_arch_specific
{ {
...@@ -8,4 +9,47 @@ struct mod_arch_specific ...@@ -8,4 +9,47 @@ struct mod_arch_specific
#define Elf_Shdr Elf32_Shdr #define Elf_Shdr Elf32_Shdr
#define Elf_Sym Elf32_Sym #define Elf_Sym Elf32_Sym
#define Elf_Ehdr Elf32_Ehdr #define Elf_Ehdr Elf32_Ehdr
#ifdef CONFIG_M386
#define MODULE_PROC_FAMILY "386 "
#elif CONFIG_M486
#define MODULE_PROC_FAMILY "486 "
#elif CONFIG_M586
#define MODULE_PROC_FAMILY "586 "
#elif CONFIG_M586TSC
#define MODULE_PROC_FAMILY "586TSC "
#elif CONFIG_M586MMX
#define MODULE_PROC_FAMILY "586MMX "
#elif CONFIG_M686
#define MODULE_PROC_FAMILY "686 "
#elif CONFIG_MPENTIUMII
#define MODULE_PROC_FAMILY "PENTIUMII "
#elif CONFIG_MPENTIUMIII
#define MODULE_PROC_FAMILY "PENTIUMIII "
#elif CONFIG_MPENTIUM4
#define MODULE_PROC_FAMILY "PENTIUM4 "
#elif CONFIG_MK6
#define MODULE_PROC_FAMILY "K6 "
#elif CONFIG_MK7
#define MODULE_PROC_FAMILY "K7 "
#elif CONFIG_MK8
#define MODULE_PROC_FAMILY "K8 "
#elif CONFIG_MELAN
#define MODULE_PROC_FAMILY "ELAN "
#elif CONFIG_MCRUSOE
#define MODULE_PROC_FAMILY "CRUSOE "
#elif CONFIG_MWINCHIPC6
#define MODULE_PROC_FAMILY "WINCHIPC6 "
#elif CONFIG_MWINCHIP2
#define MODULE_PROC_FAMILY "WINCHIP2 "
#elif CONFIG_MWINCHIP3D
#define MODULE_PROC_FAMILY "WINCHIP3D "
#elif CONFIG_MCYRIXIII
#define MODULE_PROC_FAMILY "CYRIXIII "
#else
#error unknown processor family
#endif
#define MODULE_ARCH_VERMAGIC MODULE_PROC_FAMILY
#endif /* _ASM_I386_MODULE_H */ #endif /* _ASM_I386_MODULE_H */
...@@ -16,11 +16,11 @@ ...@@ -16,11 +16,11 @@
/* /*
* a maximum of 16 APICs with the current APIC ID architecture. * a maximum of 16 APICs with the current APIC ID architecture.
*/ */
#ifdef CONFIG_X86_NUMA #if defined(CONFIG_X86_NUMAQ) || defined (CONFIG_X86_SUMMIT)
#define MAX_APICS 256 #define MAX_APICS 256
#else /* !CONFIG_X86_NUMA */ #else
#define MAX_APICS 16 #define MAX_APICS 16
#endif /* CONFIG_X86_NUMA */ #endif
#define MAX_MPC_ENTRY 1024 #define MAX_MPC_ENTRY 1024
......
...@@ -22,12 +22,6 @@ ...@@ -22,12 +22,6 @@
#endif #endif
#endif #endif
#ifdef CONFIG_X86_NUMAQ
#define INT_DELIVERY_MODE 0 /* physical delivery on LOCAL quad */
#else
#define INT_DELIVERY_MODE 1 /* logical delivery broadcast to all procs */
#endif
#define BAD_APICID 0xFFu #define BAD_APICID 0xFFu
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
...@@ -82,12 +76,6 @@ static inline int num_booting_cpus(void) ...@@ -82,12 +76,6 @@ static inline int num_booting_cpus(void)
return hweight32(cpu_callout_map); return hweight32(cpu_callout_map);
} }
/* Mapping from cpu number to logical apicid */
extern volatile u8 cpu_2_logical_apicid[];
static inline int cpu_to_logical_apicid(int cpu)
{
return (int)cpu_2_logical_apicid[cpu];
}
extern void map_cpu_to_logical_apicid(void); extern void map_cpu_to_logical_apicid(void);
extern void unmap_cpu_to_logical_apicid(int cpu); extern void unmap_cpu_to_logical_apicid(int cpu);
......
...@@ -130,7 +130,7 @@ int cpufreq_register_driver(struct cpufreq_driver *driver_data); ...@@ -130,7 +130,7 @@ int cpufreq_register_driver(struct cpufreq_driver *driver_data);
int cpufreq_unregister_driver(struct cpufreq_driver *driver_data); int cpufreq_unregister_driver(struct cpufreq_driver *driver_data);
/* deprecated */ /* deprecated */
#define cpufreq_register(x) cpufreq_register_driver(x) #define cpufreq_register(x) cpufreq_register_driver(x)
#define cpufreq_unregister(x) cpufreq_unregister_driver(NULL) #define cpufreq_unregister() cpufreq_unregister_driver(NULL)
void cpufreq_notify_transition(struct cpufreq_freqs *freqs, unsigned int state); void cpufreq_notify_transition(struct cpufreq_freqs *freqs, unsigned int state);
......
...@@ -992,8 +992,6 @@ extern struct vfsmount *kern_mount(struct file_system_type *); ...@@ -992,8 +992,6 @@ extern struct vfsmount *kern_mount(struct file_system_type *);
extern int may_umount(struct vfsmount *); extern int may_umount(struct vfsmount *);
extern long do_mount(char *, char *, char *, unsigned long, void *); extern long do_mount(char *, char *, char *, unsigned long, void *);
#define kern_umount mntput
extern int vfs_statfs(struct super_block *, struct statfs *); extern int vfs_statfs(struct super_block *, struct statfs *);
/* Return value for VFS lock functions - tells locks.c to lock conventionally /* Return value for VFS lock functions - tells locks.c to lock conventionally
......
...@@ -484,14 +484,6 @@ union i2c_smbus_data { ...@@ -484,14 +484,6 @@ union i2c_smbus_data {
#define I2C_MAJOR 89 /* Device major number */ #define I2C_MAJOR 89 /* Device major number */
# ifndef NULL
# define NULL ( (void *) 0 )
# endif
# ifndef ENODEV
# include <asm/errno.h>
# endif
/* These defines are used for probing i2c client addresses */ /* These defines are used for probing i2c client addresses */
/* Default fill of many variables */ /* Default fill of many variables */
#define I2C_CLIENT_DEFAULTS {I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \ #define I2C_CLIENT_DEFAULTS {I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
# #
obj-y := main.o version.o do_mounts.o initramfs.o obj-y := main.o version.o do_mounts.o initramfs.o
obj-$(CONFIG_MODULES) += vermagic.o
# files to be removed upon make clean # files to be removed upon make clean
clean-files := ../include/linux/compile.h clean-files := ../include/linux/compile.h
......
#include <linux/version.h>
#include <linux/module.h>
/* Simply sanity version stamp for modules. */
#ifdef CONFIG_SMP
#define MODULE_VERMAGIC_SMP "SMP "
#else
#define MODULE_VERMAGIC_SMP ""
#endif
#ifdef CONFIG_PREEMPT
#define MODULE_VERMAGIC_PREEMPT "preempt "
#else
#define MODULE_VERMAGIC_PREEMPT ""
#endif
#ifndef MODULE_ARCH_VERMAGIC
#define MODULE_ARCH_VERMAGIC ""
#endif
const char vermagic[] __attribute__((section("__vermagic"))) =
UTS_RELEASE " "
MODULE_VERMAGIC_SMP MODULE_VERMAGIC_PREEMPT MODULE_ARCH_VERMAGIC
"gcc-" __stringify(__GNUC__) "." __stringify(__GNUC_MINOR__);
...@@ -963,6 +963,9 @@ static void set_license(struct module *mod, Elf_Shdr *sechdrs, int licenseidx) ...@@ -963,6 +963,9 @@ static void set_license(struct module *mod, Elf_Shdr *sechdrs, int licenseidx)
} }
} }
/* From init/vermagic.o */
extern char vermagic[];
/* Allocate and load the module: note that size of section 0 is always /* Allocate and load the module: note that size of section 0 is always
zero, and we rely on this for optional sections. */ zero, and we rely on this for optional sections. */
static struct module *load_module(void *umod, static struct module *load_module(void *umod,
...@@ -973,7 +976,7 @@ static struct module *load_module(void *umod, ...@@ -973,7 +976,7 @@ static struct module *load_module(void *umod,
Elf_Shdr *sechdrs; Elf_Shdr *sechdrs;
char *secstrings, *args; char *secstrings, *args;
unsigned int i, symindex, exportindex, strindex, setupindex, exindex, unsigned int i, symindex, exportindex, strindex, setupindex, exindex,
modindex, obsparmindex, licenseindex, gplindex; modindex, obsparmindex, licenseindex, gplindex, vmagindex;
long arglen; long arglen;
struct module *mod; struct module *mod;
long err = 0; long err = 0;
...@@ -1012,7 +1015,7 @@ static struct module *load_module(void *umod, ...@@ -1012,7 +1015,7 @@ static struct module *load_module(void *umod,
exportindex = setupindex = obsparmindex = gplindex = licenseindex = 0; exportindex = setupindex = obsparmindex = gplindex = licenseindex = 0;
/* And these should exist, but gcc whinges if we don't init them */ /* And these should exist, but gcc whinges if we don't init them */
symindex = strindex = exindex = modindex = 0; symindex = strindex = exindex = modindex = vmagindex = 0;
/* Find where important sections are */ /* Find where important sections are */
for (i = 1; i < hdr->e_shnum; i++) { for (i = 1; i < hdr->e_shnum; i++) {
...@@ -1062,6 +1065,11 @@ static struct module *load_module(void *umod, ...@@ -1062,6 +1065,11 @@ static struct module *load_module(void *umod,
/* EXPORT_SYMBOL_GPL() */ /* EXPORT_SYMBOL_GPL() */
DEBUGP("GPL symbols found in section %u\n", i); DEBUGP("GPL symbols found in section %u\n", i);
gplindex = i; gplindex = i;
} else if (strcmp(secstrings+sechdrs[i].sh_name,
"__vermagic") == 0) {
/* Version magic. */
DEBUGP("Version magic found in section %u\n", i);
vmagindex = i;
} }
#ifdef CONFIG_KALLSYMS #ifdef CONFIG_KALLSYMS
/* symbol and string tables for decoding later. */ /* symbol and string tables for decoding later. */
...@@ -1082,6 +1090,18 @@ static struct module *load_module(void *umod, ...@@ -1082,6 +1090,18 @@ static struct module *load_module(void *umod,
} }
mod = (void *)sechdrs[modindex].sh_addr; mod = (void *)sechdrs[modindex].sh_addr;
/* This is allowed: modprobe --force will strip it. */
if (!vmagindex) {
tainted |= TAINT_FORCED_MODULE;
printk(KERN_WARNING "%s: no version magic, tainting kernel.\n",
mod->name);
} else if (strcmp((char *)sechdrs[vmagindex].sh_addr, vermagic) != 0) {
printk(KERN_ERR "%s: version magic '%s' should be '%s'\n",
mod->name, (char*)sechdrs[vmagindex].sh_addr, vermagic);
err = -ENOEXEC;
goto free_hdr;
}
/* Now copy in args */ /* Now copy in args */
arglen = strlen_user(uargs); arglen = strlen_user(uargs);
if (!arglen) { if (!arglen) {
......
...@@ -176,10 +176,15 @@ quiet_cmd_link_multi-y = LD $@ ...@@ -176,10 +176,15 @@ quiet_cmd_link_multi-y = LD $@
cmd_link_multi-y = $(LD) $(LDFLAGS) $(EXTRA_LDFLAGS) -r -o $@ $(filter $(addprefix $(obj)/,$($(subst $(obj)/,,$(@:.o=-objs))) $($(subst $(obj)/,,$(@:.o=-y)))),$^) cmd_link_multi-y = $(LD) $(LDFLAGS) $(EXTRA_LDFLAGS) -r -o $@ $(filter $(addprefix $(obj)/,$($(subst $(obj)/,,$(@:.o=-objs))) $($(subst $(obj)/,,$(@:.o=-y)))),$^)
quiet_cmd_link_multi-m = LD [M] $@ quiet_cmd_link_multi-m = LD [M] $@
cmd_link_multi-m = $(LD) $(LDFLAGS) $(EXTRA_LDFLAGS) $(LDFLAGS_MODULE) -o $@ $(filter $(addprefix $(obj)/,$($(subst $(obj)/,,$(@:.ko=-objs))) $($(subst $(obj)/,,$(@:.ko=-y)))),$^) cmd_link_multi-m = $(LD) $(LDFLAGS) $(EXTRA_LDFLAGS) $(LDFLAGS_MODULE) -o $@ $(filter $(addprefix $(obj)/,$($(subst $(obj)/,,$(@:.ko=-objs))) $($(subst $(obj)/,,$(@:.ko=-y)))),$^) init/vermagic.o
quiet_cmd_link_single-m = LD [M] $@ quiet_cmd_link_single-m = LD [M] $@
cmd_link_single-m = $(LD) $(LDFLAGS) $(EXTRA_LDFLAGS) $(LDFLAGS_MODULE) -o $@ $< cmd_link_single-m = $(LD) $(LDFLAGS) $(EXTRA_LDFLAGS) $(LDFLAGS_MODULE) -o $@ $< init/vermagic.o
# Don't rebuilt vermagic.o unless we actually are in the init/ dir
ifneq ($(obj),init)
init/vermagic.o: ;
endif
# We would rather have a list of rules like # We would rather have a list of rules like
# foo.o: $(foo-objs) # foo.o: $(foo-objs)
...@@ -188,10 +193,10 @@ cmd_link_single-m = $(LD) $(LDFLAGS) $(EXTRA_LDFLAGS) $(LDFLAGS_MODULE) -o $@ $< ...@@ -188,10 +193,10 @@ cmd_link_single-m = $(LD) $(LDFLAGS) $(EXTRA_LDFLAGS) $(LDFLAGS_MODULE) -o $@ $<
$(multi-used-y) : %.o: $(multi-objs-y) FORCE $(multi-used-y) : %.o: $(multi-objs-y) FORCE
$(call if_changed,link_multi-y) $(call if_changed,link_multi-y)
$(multi-used-m:.o=.ko) : %.ko: $(multi-objs-m) FORCE $(multi-used-m:.o=.ko) : %.ko: $(multi-objs-m) init/vermagic.o FORCE
$(call if_changed,link_multi-m) $(call if_changed,link_multi-m)
$(single-used-m:.o=.ko) : %.ko: %.o FORCE $(single-used-m:.o=.ko) : %.ko: %.o init/vermagic.o FORCE
$(call if_changed,link_single-m) $(call if_changed,link_single-m)
targets += $(multi-used-y) $(multi-used-m:.o=.ko) $(single-used-m:.o=.ko) targets += $(multi-used-y) $(multi-used-m:.o=.ko) $(single-used-m:.o=.ko)
......
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