Merge branch 'from-linus'
This commit is contained in:
commit
9f5a405b68
|
@ -11,6 +11,8 @@
|
|||
Joel Schopp <jschopp@austin.ibm.com>
|
||||
ia64/x86_64:
|
||||
Ashok Raj <ashok.raj@intel.com>
|
||||
s390:
|
||||
Heiko Carstens <heiko.carstens@de.ibm.com>
|
||||
|
||||
Authors: Ashok Raj <ashok.raj@intel.com>
|
||||
Lots of feedback: Nathan Lynch <nathanl@austin.ibm.com>,
|
||||
|
@ -44,9 +46,28 @@ maxcpus=n Restrict boot time cpus to n. Say if you have 4 cpus, using
|
|||
maxcpus=2 will only boot 2. You can choose to bring the
|
||||
other cpus later online, read FAQ's for more info.
|
||||
|
||||
additional_cpus=n [x86_64 only] use this to limit hotpluggable cpus.
|
||||
This option sets
|
||||
cpu_possible_map = cpu_present_map + additional_cpus
|
||||
additional_cpus*=n Use this to limit hotpluggable cpus. This option sets
|
||||
cpu_possible_map = cpu_present_map + additional_cpus
|
||||
|
||||
(*) Option valid only for following architectures
|
||||
- x86_64, ia64, s390
|
||||
|
||||
ia64 and x86_64 use the number of disabled local apics in ACPI tables MADT
|
||||
to determine the number of potentially hot-pluggable cpus. The implementation
|
||||
should only rely on this to count the #of cpus, but *MUST* not rely on the
|
||||
apicid values in those tables for disabled apics. In the event BIOS doesnt
|
||||
mark such hot-pluggable cpus as disabled entries, one could use this
|
||||
parameter "additional_cpus=x" to represent those cpus in the cpu_possible_map.
|
||||
|
||||
s390 uses the number of cpus it detects at IPL time to also the number of bits
|
||||
in cpu_possible_map. If it is desired to add additional cpus at a later time
|
||||
the number should be specified using this option or the possible_cpus option.
|
||||
|
||||
possible_cpus=n [s390 only] use this to set hotpluggable cpus.
|
||||
This option sets possible_cpus bits in
|
||||
cpu_possible_map. Thus keeping the numbers of bits set
|
||||
constant even if the machine gets rebooted.
|
||||
This option overrides additional_cpus.
|
||||
|
||||
CPU maps and such
|
||||
-----------------
|
||||
|
|
|
@ -178,3 +178,12 @@ Why: The ISA interface is faster and should be always available. The I2C
|
|||
probing is also known to cause trouble in at least one case (see
|
||||
bug #5889.)
|
||||
Who: Jean Delvare <khali@linux-fr.org>
|
||||
|
||||
---------------------------
|
||||
|
||||
What: mount/umount uevents
|
||||
When: February 2007
|
||||
Why: These events are not correct, and do not properly let userspace know
|
||||
when a file system has been mounted or unmounted. Userspace should
|
||||
poll the /proc/mounts file instead to detect this properly.
|
||||
Who: Greg Kroah-Hartman <gregkh@suse.de>
|
||||
|
|
|
@ -457,6 +457,12 @@ ChangeLog
|
|||
|
||||
Note, a technical ChangeLog aimed at kernel hackers is in fs/ntfs/ChangeLog.
|
||||
|
||||
2.1.26:
|
||||
- Implement support for sector sizes above 512 bytes (up to the maximum
|
||||
supported by NTFS which is 4096 bytes).
|
||||
- Enhance support for NTFS volumes which were supported by Windows but
|
||||
not by Linux due to invalid attribute list attribute flags.
|
||||
- A few minor updates and bug fixes.
|
||||
2.1.25:
|
||||
- Write support is now extended with write(2) being able to both
|
||||
overwrite existing file data and to extend files. Also, if a write
|
||||
|
|
|
@ -79,15 +79,27 @@ that instance in a system with many cpus making intensive use of it.
|
|||
|
||||
|
||||
tmpfs has a mount option to set the NUMA memory allocation policy for
|
||||
all files in that instance:
|
||||
mpol=interleave prefers to allocate memory from each node in turn
|
||||
mpol=default prefers to allocate memory from the local node
|
||||
mpol=bind prefers to allocate from mpol_nodelist
|
||||
mpol=preferred prefers to allocate from first node in mpol_nodelist
|
||||
all files in that instance (if CONFIG_NUMA is enabled) - which can be
|
||||
adjusted on the fly via 'mount -o remount ...'
|
||||
|
||||
The following mount option is used in conjunction with mpol=interleave,
|
||||
mpol=bind or mpol=preferred:
|
||||
mpol_nodelist: nodelist suitable for parsing with nodelist_parse.
|
||||
mpol=default prefers to allocate memory from the local node
|
||||
mpol=prefer:Node prefers to allocate memory from the given Node
|
||||
mpol=bind:NodeList allocates memory only from nodes in NodeList
|
||||
mpol=interleave prefers to allocate from each node in turn
|
||||
mpol=interleave:NodeList allocates from each node of NodeList in turn
|
||||
|
||||
NodeList format is a comma-separated list of decimal numbers and ranges,
|
||||
a range being two hyphen-separated decimal numbers, the smallest and
|
||||
largest node numbers in the range. For example, mpol=bind:0-3,5,7,9-15
|
||||
|
||||
Note that trying to mount a tmpfs with an mpol option will fail if the
|
||||
running kernel does not support NUMA; and will fail if its nodelist
|
||||
specifies a node >= MAX_NUMNODES. If your system relies on that tmpfs
|
||||
being mounted, but from time to time runs a kernel built without NUMA
|
||||
capability (perhaps a safe recovery kernel), or configured to support
|
||||
fewer nodes, then it is advisable to omit the mpol option from automatic
|
||||
mount options. It can be added later, when the tmpfs is already mounted
|
||||
on MountPoint, by 'mount -o remount,mpol=Policy:NodeList MountPoint'.
|
||||
|
||||
|
||||
To specify the initial root directory you can use the following mount
|
||||
|
@ -109,4 +121,4 @@ RAM/SWAP in 10240 inodes and it is only accessible by root.
|
|||
Author:
|
||||
Christoph Rohland <cr@sap.com>, 1.12.01
|
||||
Updated:
|
||||
Hugh Dickins <hugh@veritas.com>, 13 March 2005
|
||||
Hugh Dickins <hugh@veritas.com>, 19 February 2006
|
||||
|
|
|
@ -57,8 +57,6 @@ OPTIONS
|
|||
|
||||
port=n port to connect to on the remote server
|
||||
|
||||
timeout=n request timeouts (in ms) (default 60000ms)
|
||||
|
||||
noextend force legacy mode (no 9P2000.u semantics)
|
||||
|
||||
uid attempt to mount as a particular uid
|
||||
|
@ -74,10 +72,16 @@ OPTIONS
|
|||
RESOURCES
|
||||
=========
|
||||
|
||||
The Linux version of the 9P server, along with some client-side utilities
|
||||
can be found at http://v9fs.sf.net (along with a CVS repository of the
|
||||
development branch of this module). There are user and developer mailing
|
||||
lists here, as well as a bug-tracker.
|
||||
The Linux version of the 9P server is now maintained under the npfs project
|
||||
on sourceforge (http://sourceforge.net/projects/npfs).
|
||||
|
||||
There are user and developer mailing lists available through the v9fs project
|
||||
on sourceforge (http://sourceforge.net/projects/v9fs).
|
||||
|
||||
News and other information is maintained on SWiK (http://swik.net/v9fs).
|
||||
|
||||
Bug reports may be issued through the kernel.org bugzilla
|
||||
(http://bugzilla.kernel.org)
|
||||
|
||||
For more information on the Plan 9 Operating System check out
|
||||
http://plan9.bell-labs.com/plan9
|
||||
|
|
|
@ -1638,6 +1638,9 @@ running once the system is up.
|
|||
Format:
|
||||
<irq>,<irq_mask>,<io>,<full_duplex>,<do_sound>,<lockup_hack>[,<irq2>[,<irq3>[,<irq4>]]]
|
||||
|
||||
norandmaps Don't use address space randomization
|
||||
Equivalent to echo 0 > /proc/sys/kernel/randomize_va_space
|
||||
|
||||
|
||||
______________________________________________________________________
|
||||
Changelog:
|
||||
|
|
|
@ -16,6 +16,7 @@ before actually making adjustments.
|
|||
|
||||
Currently, these files might (depending on your configuration)
|
||||
show up in /proc/sys/kernel:
|
||||
- acpi_video_flags
|
||||
- acct
|
||||
- core_pattern
|
||||
- core_uses_pid
|
||||
|
@ -57,6 +58,15 @@ show up in /proc/sys/kernel:
|
|||
|
||||
==============================================================
|
||||
|
||||
acpi_video_flags:
|
||||
|
||||
flags
|
||||
|
||||
See Doc*/kernel/power/video.txt, it allows mode of video boot to be
|
||||
set during run time.
|
||||
|
||||
==============================================================
|
||||
|
||||
acct:
|
||||
|
||||
highwater lowwater frequency
|
||||
|
|
|
@ -52,6 +52,10 @@ APICs
|
|||
apicmaintimer. Useful when your PIT timer is totally
|
||||
broken.
|
||||
|
||||
disable_8254_timer / enable_8254_timer
|
||||
Enable interrupt 0 timer routing over the 8254 in addition to over
|
||||
the IO-APIC. The kernel tries to set a sensible default.
|
||||
|
||||
Early Console
|
||||
|
||||
syntax: earlyprintk=vga
|
||||
|
|
2
Makefile
2
Makefile
|
@ -1,7 +1,7 @@
|
|||
VERSION = 2
|
||||
PATCHLEVEL = 6
|
||||
SUBLEVEL = 16
|
||||
EXTRAVERSION =-rc3
|
||||
EXTRAVERSION =-rc5
|
||||
NAME=Sliding Snow Leopard
|
||||
|
||||
# *DOCUMENTATION*
|
||||
|
|
|
@ -128,19 +128,27 @@ EXPORT_SYMBOL(rtc_tm_to_time);
|
|||
/*
|
||||
* Calculate the next alarm time given the requested alarm time mask
|
||||
* and the current time.
|
||||
*
|
||||
* FIXME: for now, we just copy the alarm time because we're lazy (and
|
||||
* is therefore buggy - setting a 10am alarm at 8pm will not result in
|
||||
* the alarm triggering.)
|
||||
*/
|
||||
void rtc_next_alarm_time(struct rtc_time *next, struct rtc_time *now, struct rtc_time *alrm)
|
||||
{
|
||||
unsigned long next_time;
|
||||
unsigned long now_time;
|
||||
|
||||
next->tm_year = now->tm_year;
|
||||
next->tm_mon = now->tm_mon;
|
||||
next->tm_mday = now->tm_mday;
|
||||
next->tm_hour = alrm->tm_hour;
|
||||
next->tm_min = alrm->tm_min;
|
||||
next->tm_sec = alrm->tm_sec;
|
||||
|
||||
rtc_tm_to_time(now, &now_time);
|
||||
rtc_tm_to_time(next, &next_time);
|
||||
|
||||
if (next_time < now_time) {
|
||||
/* Advance one day */
|
||||
next_time += 60 * 60 * 24;
|
||||
rtc_time_to_tm(next_time, next);
|
||||
}
|
||||
}
|
||||
|
||||
static inline int rtc_read_time(struct rtc_ops *ops, struct rtc_time *tm)
|
||||
|
|
|
@ -111,7 +111,7 @@
|
|||
CALL(sys_statfs)
|
||||
/* 100 */ CALL(sys_fstatfs)
|
||||
CALL(sys_ni_syscall)
|
||||
CALL(OBSOLETE(sys_socketcall))
|
||||
CALL(OBSOLETE(ABI(sys_socketcall, sys_oabi_socketcall)))
|
||||
CALL(sys_syslog)
|
||||
CALL(sys_setitimer)
|
||||
/* 105 */ CALL(sys_getitimer)
|
||||
|
|
|
@ -566,7 +566,7 @@ ENTRY(__switch_to)
|
|||
ldr r6, [r2, #TI_CPU_DOMAIN]!
|
||||
#endif
|
||||
#if __LINUX_ARM_ARCH__ >= 6
|
||||
#ifdef CONFIG_CPU_MPCORE
|
||||
#ifdef CONFIG_CPU_32v6K
|
||||
clrex
|
||||
#else
|
||||
strex r5, r4, [ip] @ Clear exclusive monitor
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
#include <linux/root_dev.h>
|
||||
#include <linux/cpu.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/smp.h>
|
||||
|
||||
#include <asm/cpu.h>
|
||||
#include <asm/elf.h>
|
||||
|
@ -771,6 +772,10 @@ void __init setup_arch(char **cmdline_p)
|
|||
paging_init(&meminfo, mdesc);
|
||||
request_standard_resources(&meminfo, mdesc);
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
smp_init_cpus();
|
||||
#endif
|
||||
|
||||
cpu_init();
|
||||
|
||||
/*
|
||||
|
|
|
@ -338,7 +338,6 @@ void __init smp_prepare_boot_cpu(void)
|
|||
|
||||
per_cpu(cpu_data, cpu).idle = current;
|
||||
|
||||
cpu_set(cpu, cpu_possible_map);
|
||||
cpu_set(cpu, cpu_present_map);
|
||||
cpu_set(cpu, cpu_online_map);
|
||||
}
|
||||
|
|
|
@ -64,6 +64,7 @@
|
|||
* sys_connect:
|
||||
* sys_sendmsg:
|
||||
* sys_sendto:
|
||||
* sys_socketcall:
|
||||
*
|
||||
* struct sockaddr_un loses its padding with EABI. Since the size of the
|
||||
* structure is used as a validation test in unix_mkname(), we need to
|
||||
|
@ -78,6 +79,7 @@
|
|||
#include <linux/eventpoll.h>
|
||||
#include <linux/sem.h>
|
||||
#include <linux/socket.h>
|
||||
#include <linux/net.h>
|
||||
#include <asm/ipc.h>
|
||||
#include <asm/uaccess.h>
|
||||
|
||||
|
@ -408,3 +410,31 @@ asmlinkage long sys_oabi_sendmsg(int fd, struct msghdr __user *msg, unsigned fla
|
|||
return sys_sendmsg(fd, msg, flags);
|
||||
}
|
||||
|
||||
asmlinkage long sys_oabi_socketcall(int call, unsigned long __user *args)
|
||||
{
|
||||
unsigned long r = -EFAULT, a[6];
|
||||
|
||||
switch (call) {
|
||||
case SYS_BIND:
|
||||
if (copy_from_user(a, args, 3 * sizeof(long)) == 0)
|
||||
r = sys_oabi_bind(a[0], (struct sockaddr __user *)a[1], a[2]);
|
||||
break;
|
||||
case SYS_CONNECT:
|
||||
if (copy_from_user(a, args, 3 * sizeof(long)) == 0)
|
||||
r = sys_oabi_connect(a[0], (struct sockaddr __user *)a[1], a[2]);
|
||||
break;
|
||||
case SYS_SENDTO:
|
||||
if (copy_from_user(a, args, 6 * sizeof(long)) == 0)
|
||||
r = sys_oabi_sendto(a[0], (void __user *)a[1], a[2], a[3],
|
||||
(struct sockaddr __user *)a[4], a[5]);
|
||||
break;
|
||||
case SYS_SENDMSG:
|
||||
if (copy_from_user(a, args, 3 * sizeof(long)) == 0)
|
||||
r = sys_oabi_sendmsg(a[0], (struct msghdr __user *)a[1], a[2]);
|
||||
break;
|
||||
default:
|
||||
r = sys_socketcall(call, args);
|
||||
}
|
||||
|
||||
return r;
|
||||
}
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
#include <linux/personality.h>
|
||||
#include <linux/ptrace.h>
|
||||
#include <linux/kallsyms.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/init.h>
|
||||
|
||||
#include <asm/atomic.h>
|
||||
|
@ -231,6 +232,13 @@ NORET_TYPE void die(const char *str, struct pt_regs *regs, int err)
|
|||
__die(str, err, thread, regs);
|
||||
bust_spinlocks(0);
|
||||
spin_unlock_irq(&die_lock);
|
||||
|
||||
if (panic_on_oops) {
|
||||
printk(KERN_EMERG "Fatal exception: panic in 5 seconds\n");
|
||||
ssleep(5);
|
||||
panic("Fatal exception");
|
||||
}
|
||||
|
||||
do_exit(SIGSEGV);
|
||||
}
|
||||
|
||||
|
|
|
@ -100,8 +100,10 @@ void __init at91_add_device_udc(struct at91_udc_data *data)
|
|||
at91_set_gpio_input(data->vbus_pin, 0);
|
||||
at91_set_deglitch(data->vbus_pin, 1);
|
||||
}
|
||||
if (data->pullup_pin)
|
||||
if (data->pullup_pin) {
|
||||
at91_set_gpio_output(data->pullup_pin, 0);
|
||||
at91_set_multi_drive(data->pullup_pin, 1);
|
||||
}
|
||||
|
||||
udc_data = *data;
|
||||
platform_device_register(&at91rm9200_udc_device);
|
||||
|
|
|
@ -159,6 +159,23 @@ int __init_or_module at91_set_deglitch(unsigned pin, int is_on)
|
|||
}
|
||||
EXPORT_SYMBOL(at91_set_deglitch);
|
||||
|
||||
/*
|
||||
* enable/disable the multi-driver; This is only valid for output and
|
||||
* allows the output pin to run as an open collector output.
|
||||
*/
|
||||
int __init_or_module at91_set_multi_drive(unsigned pin, int is_on)
|
||||
{
|
||||
void __iomem *pio = pin_to_controller(pin);
|
||||
unsigned mask = pin_to_mask(pin);
|
||||
|
||||
if (!pio)
|
||||
return -EINVAL;
|
||||
|
||||
__raw_writel(mask, pio + (is_on ? PIO_MDER : PIO_MDDR));
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(at91_set_multi_drive);
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
|
@ -257,8 +274,18 @@ static void gpio_irq_handler(unsigned irq, struct irqdesc *desc, struct pt_regs
|
|||
gpio = &irq_desc[pin];
|
||||
|
||||
while (isr) {
|
||||
if (isr & 1)
|
||||
gpio->handle(pin, gpio, regs);
|
||||
if (isr & 1) {
|
||||
if (unlikely(gpio->disable_depth)) {
|
||||
/*
|
||||
* The core ARM interrupt handler lazily disables IRQs so
|
||||
* another IRQ must be generated before it actually gets
|
||||
* here to be disabled on the GPIO controller.
|
||||
*/
|
||||
gpio_irq_mask(pin);
|
||||
}
|
||||
else
|
||||
gpio->handle(pin, gpio, regs);
|
||||
}
|
||||
pin++;
|
||||
gpio++;
|
||||
isr >>= 1;
|
||||
|
|
|
@ -140,6 +140,18 @@ static void __init poke_milo(void)
|
|||
mb();
|
||||
}
|
||||
|
||||
/*
|
||||
* Initialise the CPU possible map early - this describes the CPUs
|
||||
* which may be present or become present in the system.
|
||||
*/
|
||||
void __init smp_init_cpus(void)
|
||||
{
|
||||
unsigned int i, ncores = get_core_count();
|
||||
|
||||
for (i = 0; i < ncores; i++)
|
||||
cpu_set(i, cpu_possible_map);
|
||||
}
|
||||
|
||||
void __init smp_prepare_cpus(unsigned int max_cpus)
|
||||
{
|
||||
unsigned int ncores = get_core_count();
|
||||
|
@ -176,14 +188,11 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
|
|||
max_cpus = ncores;
|
||||
|
||||
/*
|
||||
* Initialise the possible/present maps.
|
||||
* cpu_possible_map describes the set of CPUs which may be present
|
||||
* cpu_present_map describes the set of CPUs populated
|
||||
* Initialise the present map, which describes the set of CPUs
|
||||
* actually populated at the present time.
|
||||
*/
|
||||
for (i = 0; i < max_cpus; i++) {
|
||||
cpu_set(i, cpu_possible_map);
|
||||
for (i = 0; i < max_cpus; i++)
|
||||
cpu_set(i, cpu_present_map);
|
||||
}
|
||||
|
||||
/*
|
||||
* Do we need any more CPUs? If so, then let them know where
|
||||
|
|
|
@ -13,7 +13,6 @@
|
|||
#include <linux/mm.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/config.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/major.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
|
|
@ -12,7 +12,6 @@
|
|||
#include <linux/mm.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/config.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/major.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
|
|
@ -111,24 +111,30 @@ static int ixp4xx_set_irq_type(unsigned int irq, unsigned int type)
|
|||
if (line < 0)
|
||||
return -EINVAL;
|
||||
|
||||
if (type & IRQT_BOTHEDGE) {
|
||||
switch (type){
|
||||
case IRQT_BOTHEDGE:
|
||||
int_style = IXP4XX_GPIO_STYLE_TRANSITIONAL;
|
||||
irq_type = IXP4XX_IRQ_EDGE;
|
||||
} else if (type & IRQT_RISING) {
|
||||
break;
|
||||
case IRQT_RISING:
|
||||
int_style = IXP4XX_GPIO_STYLE_RISING_EDGE;
|
||||
irq_type = IXP4XX_IRQ_EDGE;
|
||||
} else if (type & IRQT_FALLING) {
|
||||
break;
|
||||
case IRQT_FALLING:
|
||||
int_style = IXP4XX_GPIO_STYLE_FALLING_EDGE;
|
||||
irq_type = IXP4XX_IRQ_EDGE;
|
||||
} else if (type & IRQT_HIGH) {
|
||||
break;
|
||||
case IRQT_HIGH:
|
||||
int_style = IXP4XX_GPIO_STYLE_ACTIVE_HIGH;
|
||||
irq_type = IXP4XX_IRQ_LEVEL;
|
||||
} else if (type & IRQT_LOW) {
|
||||
break;
|
||||
case IRQT_LOW:
|
||||
int_style = IXP4XX_GPIO_STYLE_ACTIVE_LOW;
|
||||
irq_type = IXP4XX_IRQ_LEVEL;
|
||||
} else
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
|
||||
}
|
||||
ixp4xx_config_irq(irq, irq_type);
|
||||
|
||||
if (line >= 8) { /* pins 8-15 */
|
||||
|
|
|
@ -77,6 +77,9 @@ static int __init nslu2_power_init(void)
|
|||
|
||||
static void __exit nslu2_power_exit(void)
|
||||
{
|
||||
if (!(machine_is_nslu2()))
|
||||
return;
|
||||
|
||||
free_irq(NSLU2_RB_IRQ, NULL);
|
||||
free_irq(NSLU2_PB_IRQ, NULL);
|
||||
}
|
||||
|
|
|
@ -27,8 +27,6 @@ static struct flash_platform_data nslu2_flash_data = {
|
|||
};
|
||||
|
||||
static struct resource nslu2_flash_resource = {
|
||||
.start = NSLU2_FLASH_BASE,
|
||||
.end = NSLU2_FLASH_BASE + NSLU2_FLASH_SIZE,
|
||||
.flags = IORESOURCE_MEM,
|
||||
};
|
||||
|
||||
|
@ -52,6 +50,12 @@ static struct platform_device nslu2_i2c_controller = {
|
|||
.num_resources = 0,
|
||||
};
|
||||
|
||||
static struct platform_device nslu2_beeper = {
|
||||
.name = "ixp4xx-beeper",
|
||||
.id = NSLU2_GPIO_BUZZ,
|
||||
.num_resources = 0,
|
||||
};
|
||||
|
||||
static struct resource nslu2_uart_resources[] = {
|
||||
{
|
||||
.start = IXP4XX_UART1_BASE_PHYS,
|
||||
|
@ -99,6 +103,7 @@ static struct platform_device *nslu2_devices[] __initdata = {
|
|||
&nslu2_i2c_controller,
|
||||
&nslu2_flash,
|
||||
&nslu2_uart,
|
||||
&nslu2_beeper,
|
||||
};
|
||||
|
||||
static void nslu2_power_off(void)
|
||||
|
@ -116,6 +121,10 @@ static void __init nslu2_init(void)
|
|||
{
|
||||
ixp4xx_sys_init();
|
||||
|
||||
nslu2_flash_resource.start = IXP4XX_EXP_BUS_BASE(0);
|
||||
nslu2_flash_resource.end =
|
||||
IXP4XX_EXP_BUS_BASE(0) + ixp4xx_exp_bus_size - 1;
|
||||
|
||||
pm_power_off = nslu2_power_off;
|
||||
|
||||
platform_add_devices(nslu2_devices, ARRAY_SIZE(nslu2_devices));
|
||||
|
|
|
@ -143,6 +143,18 @@ static void __init poke_milo(void)
|
|||
mb();
|
||||
}
|
||||
|
||||
/*
|
||||
* Initialise the CPU possible map early - this describes the CPUs
|
||||
* which may be present or become present in the system.
|
||||
*/
|
||||
void __init smp_init_cpus(void)
|
||||
{
|
||||
unsigned int i, ncores = get_core_count();
|
||||
|
||||
for (i = 0; i < ncores; i++)
|
||||
cpu_set(i, cpu_possible_map);
|
||||
}
|
||||
|
||||
void __init smp_prepare_cpus(unsigned int max_cpus)
|
||||
{
|
||||
unsigned int ncores = get_core_count();
|
||||
|
@ -179,14 +191,11 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
|
|||
local_timer_setup(cpu);
|
||||
|
||||
/*
|
||||
* Initialise the possible/present maps.
|
||||
* cpu_possible_map describes the set of CPUs which may be present
|
||||
* cpu_present_map describes the set of CPUs populated
|
||||
* Initialise the present map, which describes the set of CPUs
|
||||
* actually populated at the present time.
|
||||
*/
|
||||
for (i = 0; i < max_cpus; i++) {
|
||||
cpu_set(i, cpu_possible_map);
|
||||
for (i = 0; i < max_cpus; i++)
|
||||
cpu_set(i, cpu_present_map);
|
||||
}
|
||||
|
||||
/*
|
||||
* Do we need any more CPUs? If so, then let them know where
|
||||
|
|
|
@ -240,6 +240,14 @@ int __init pci_versatile_setup(int nr, struct pci_sys_data *sys)
|
|||
int i;
|
||||
int myslot = -1;
|
||||
unsigned long val;
|
||||
void __iomem *local_pci_cfg_base;
|
||||
|
||||
val = __raw_readl(SYS_PCICTL);
|
||||
if (!(val & 1)) {
|
||||
printk("Not plugged into PCI backplane!\n");
|
||||
ret = -EIO;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (nr == 0) {
|
||||
sys->mem_offset = 0;
|
||||
|
@ -253,48 +261,45 @@ int __init pci_versatile_setup(int nr, struct pci_sys_data *sys)
|
|||
goto out;
|
||||
}
|
||||
|
||||
__raw_writel(VERSATILE_PCI_MEM_BASE0 >> 28,PCI_IMAP0);
|
||||
__raw_writel(VERSATILE_PCI_MEM_BASE1 >> 28,PCI_IMAP1);
|
||||
__raw_writel(VERSATILE_PCI_MEM_BASE2 >> 28,PCI_IMAP2);
|
||||
|
||||
__raw_writel(1, SYS_PCICTL);
|
||||
|
||||
val = __raw_readl(SYS_PCICTL);
|
||||
if (!(val & 1)) {
|
||||
printk("Not plugged into PCI backplane!\n");
|
||||
ret = -EIO;
|
||||
goto out;
|
||||
}
|
||||
|
||||
/*
|
||||
* We need to discover the PCI core first to configure itself
|
||||
* before the main PCI probing is performed
|
||||
*/
|
||||
for (i=0; i<32; i++) {
|
||||
for (i=0; i<32; i++)
|
||||
if ((__raw_readl(VERSATILE_PCI_VIRT_BASE+(i<<11)+DEVICE_ID_OFFSET) == VP_PCI_DEVICE_ID) &&
|
||||
(__raw_readl(VERSATILE_PCI_VIRT_BASE+(i<<11)+CLASS_ID_OFFSET) == VP_PCI_CLASS_ID)) {
|
||||
myslot = i;
|
||||
|
||||
__raw_writel(myslot, PCI_SELFID);
|
||||
val = __raw_readl(VERSATILE_PCI_CFG_VIRT_BASE+(myslot<<11)+CSR_OFFSET);
|
||||
val |= (1<<2);
|
||||
__raw_writel(val, VERSATILE_PCI_CFG_VIRT_BASE+(myslot<<11)+CSR_OFFSET);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (myslot == -1) {
|
||||
printk("Cannot find PCI core!\n");
|
||||
ret = -EIO;
|
||||
} else {
|
||||
printk("PCI core found (slot %d)\n",myslot);
|
||||
/* Do not to map Versatile FPGA PCI device
|
||||
into memory space as we are short of
|
||||
mappable memory */
|
||||
pci_slot_ignore |= (1 << myslot);
|
||||
ret = 1;
|
||||
goto out;
|
||||
}
|
||||
|
||||
printk("PCI core found (slot %d)\n",myslot);
|
||||
|
||||
__raw_writel(myslot, PCI_SELFID);
|
||||
local_pci_cfg_base = (void *) VERSATILE_PCI_CFG_VIRT_BASE + (myslot << 11);
|
||||
|
||||
val = __raw_readl(local_pci_cfg_base + CSR_OFFSET);
|
||||
val |= PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER | PCI_COMMAND_INVALIDATE;
|
||||
__raw_writel(val, local_pci_cfg_base + CSR_OFFSET);
|
||||
|
||||
/*
|
||||
* Configure the PCI inbound memory windows to be 1:1 mapped to SDRAM
|
||||
*/
|
||||
__raw_writel(PHYS_OFFSET, local_pci_cfg_base + PCI_BASE_ADDRESS_0);
|
||||
__raw_writel(PHYS_OFFSET, local_pci_cfg_base + PCI_BASE_ADDRESS_1);
|
||||
__raw_writel(PHYS_OFFSET, local_pci_cfg_base + PCI_BASE_ADDRESS_2);
|
||||
|
||||
/*
|
||||
* Do not to map Versatile FPGA PCI device into memory space
|
||||
*/
|
||||
pci_slot_ignore |= (1 << myslot);
|
||||
ret = 1;
|
||||
|
||||
out:
|
||||
return ret;
|
||||
}
|
||||
|
@ -305,18 +310,18 @@ struct pci_bus *pci_versatile_scan_bus(int nr, struct pci_sys_data *sys)
|
|||
return pci_scan_bus(sys->busnr, &pci_versatile_ops, sys);
|
||||
}
|
||||
|
||||
/*
|
||||
* V3_LB_BASE? - local bus address
|
||||
* V3_LB_MAP? - pci bus address
|
||||
*/
|
||||
void __init pci_versatile_preinit(void)
|
||||
{
|
||||
}
|
||||
__raw_writel(VERSATILE_PCI_MEM_BASE0 >> 28, PCI_IMAP0);
|
||||
__raw_writel(VERSATILE_PCI_MEM_BASE1 >> 28, PCI_IMAP1);
|
||||
__raw_writel(VERSATILE_PCI_MEM_BASE2 >> 28, PCI_IMAP2);
|
||||
|
||||
void __init pci_versatile_postinit(void)
|
||||
{
|
||||
}
|
||||
__raw_writel(PHYS_OFFSET >> 28, PCI_SMAP0);
|
||||
__raw_writel(PHYS_OFFSET >> 28, PCI_SMAP1);
|
||||
__raw_writel(PHYS_OFFSET >> 28, PCI_SMAP2);
|
||||
|
||||
__raw_writel(1, SYS_PCICTL);
|
||||
}
|
||||
|
||||
/*
|
||||
* map the specified device/slot/pin to an IRQ. Different backplanes may need to modify this.
|
||||
|
@ -326,16 +331,15 @@ static int __init versatile_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
|
|||
int irq;
|
||||
int devslot = PCI_SLOT(dev->devfn);
|
||||
|
||||
/* slot, pin, irq
|
||||
24 1 27
|
||||
25 1 28 untested
|
||||
26 1 29
|
||||
27 1 30 untested
|
||||
*/
|
||||
/* slot, pin, irq
|
||||
* 24 1 27
|
||||
* 25 1 28
|
||||
* 26 1 29
|
||||
* 27 1 30
|
||||
*/
|
||||
irq = 27 + ((slot + pin - 1) & 3);
|
||||
|
||||
irq = 27 + ((slot + pin + 2) % 3); /* Fudged */
|
||||
|
||||
printk("map irq: slot %d, pin %d, devslot %d, irq: %d\n",slot,pin,devslot,irq);
|
||||
printk("PCI map irq: slot %d, pin %d, devslot %d, irq: %d\n",slot,pin,devslot,irq);
|
||||
|
||||
return irq;
|
||||
}
|
||||
|
@ -347,7 +351,6 @@ static struct hw_pci versatile_pci __initdata = {
|
|||
.setup = pci_versatile_setup,
|
||||
.scan = pci_versatile_scan_bus,
|
||||
.preinit = pci_versatile_preinit,
|
||||
.postinit = pci_versatile_postinit,
|
||||
};
|
||||
|
||||
static int __init versatile_pci_init(void)
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
*/
|
||||
.align 5
|
||||
ENTRY(v6_early_abort)
|
||||
#ifdef CONFIG_CPU_MPCORE
|
||||
#ifdef CONFIG_CPU_32v6K
|
||||
clrex
|
||||
#else
|
||||
strex r0, r1, [sp] @ Clear the exclusive monitor
|
||||
|
|
|
@ -38,7 +38,6 @@
|
|||
#include <linux/pm.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/proc_fs.h>
|
||||
#include <linux/pm.h>
|
||||
#include <linux/interrupt.h>
|
||||
|
||||
#include <asm/io.h>
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
#
|
||||
# http://www.arm.linux.org.uk/developer/machines/?action=new
|
||||
#
|
||||
# Last update: Mon Jan 9 12:56:42 2006
|
||||
# Last update: Mon Feb 20 10:18:02 2006
|
||||
#
|
||||
# machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number
|
||||
#
|
||||
|
@ -904,7 +904,7 @@ wg302v2 MACH_WG302V2 WG302V2 890
|
|||
eb42x MACH_EB42X EB42X 891
|
||||
iq331es MACH_IQ331ES IQ331ES 892
|
||||
cosydsp MACH_COSYDSP COSYDSP 893
|
||||
uplat7d MACH_UPLAT7D UPLAT7D 894
|
||||
uplat7d_proto MACH_UPLAT7D UPLAT7D 894
|
||||
ptdavinci MACH_PTDAVINCI PTDAVINCI 895
|
||||
mbus MACH_MBUS MBUS 896
|
||||
nadia2vb MACH_NADIA2VB NADIA2VB 897
|
||||
|
@ -938,3 +938,34 @@ auckland MACH_AUCKLAND AUCKLAND 924
|
|||
ak3220m MACH_AK3320M AK3320M 925
|
||||
duramax MACH_DURAMAX DURAMAX 926
|
||||
n35 MACH_N35 N35 927
|
||||
pronghorn MACH_PRONGHORN PRONGHORN 928
|
||||
fundy MACH_FUNDY FUNDY 929
|
||||
logicpd_pxa270 MACH_LOGICPD_PXA270 LOGICPD_PXA270 930
|
||||
cpu777 MACH_CPU777 CPU777 931
|
||||
simicon9201 MACH_SIMICON9201 SIMICON9201 932
|
||||
leap2_hpm MACH_LEAP2_HPM LEAP2_HPM 933
|
||||
cm922txa10 MACH_CM922TXA10 CM922TXA10 934
|
||||
sandgate MACH_PXA PXA 935
|
||||
sandgate2 MACH_SANDGATE2 SANDGATE2 936
|
||||
sandgate2g MACH_SANDGATE2G SANDGATE2G 937
|
||||
sandgate2p MACH_SANDGATE2P SANDGATE2P 938
|
||||
fred_jack MACH_FRED_JACK FRED_JACK 939
|
||||
ttg_color1 MACH_TTG_COLOR1 TTG_COLOR1 940
|
||||
nxeb500hmi MACH_NXEB500HMI NXEB500HMI 941
|
||||
netdcu8 MACH_NETDCU8 NETDCU8 942
|
||||
ml675050_cpu_boa MACH_ML675050_CPU_BOA ML675050_CPU_BOA 943
|
||||
ng_fvx538 MACH_NG_FVX538 NG_FVX538 944
|
||||
ng_fvs338 MACH_NG_FVS338 NG_FVS338 945
|
||||
pnx4103 MACH_PNX4103 PNX4103 946
|
||||
hesdb MACH_HESDB HESDB 947
|
||||
xsilo MACH_XSILO XSILO 948
|
||||
espresso MACH_ESPRESSO ESPRESSO 949
|
||||
emlc MACH_EMLC EMLC 950
|
||||
sisteron MACH_SISTERON SISTERON 951
|
||||
rx1950 MACH_RX1950 RX1950 952
|
||||
tsc_venus MACH_TSC_VENUS TSC_VENUS 953
|
||||
ds101j MACH_DS101J DS101J 954
|
||||
mxc300_30ads MACH_MXC30030ADS MXC30030ADS 955
|
||||
fujitsu_wimaxsoc MACH_FUJITSU_WIMAXSOC FUJITSU_WIMAXSOC 956
|
||||
dualpcmodem MACH_DUALPCMODEM DUALPCMODEM 957
|
||||
gesbc9312 MACH_GESBC9312 GESBC9312 958
|
||||
|
|
|
@ -34,7 +34,7 @@ config GDB_DEBUG
|
|||
help
|
||||
gdb stub exception support
|
||||
|
||||
config CONFIG_SH_STANDARD_BIOS
|
||||
config SH_STANDARD_BIOS
|
||||
bool "Use gdb protocol serial console"
|
||||
depends on (!H8300H_SIM && !H8S_SIM)
|
||||
help
|
||||
|
|
|
@ -328,7 +328,7 @@ CONFIG_FULLDEBUG=y
|
|||
CONFIG_NO_KERNEL_MSG=y
|
||||
# CONFIG_SYSCALL_PRINT is not set
|
||||
# CONFIG_GDB_DEBUG is not set
|
||||
# CONFIG_CONFIG_SH_STANDARD_BIOS is not set
|
||||
# CONFIG_SH_STANDARD_BIOS is not set
|
||||
# CONFIG_DEFAULT_CMDLINE is not set
|
||||
# CONFIG_BLKDEV_RESERVE is not set
|
||||
|
||||
|
|
|
@ -733,7 +733,7 @@ config PHYSICAL_START
|
|||
|
||||
config HOTPLUG_CPU
|
||||
bool "Support for hot-pluggable CPUs (EXPERIMENTAL)"
|
||||
depends on SMP && HOTPLUG && EXPERIMENTAL
|
||||
depends on SMP && HOTPLUG && EXPERIMENTAL && !X86_VOYAGER
|
||||
---help---
|
||||
Say Y here to experiment with turning CPUs off and on. CPUs
|
||||
can be controlled through /sys/devices/system/cpu.
|
||||
|
@ -1060,6 +1060,7 @@ source "arch/i386/oprofile/Kconfig"
|
|||
|
||||
config KPROBES
|
||||
bool "Kprobes (EXPERIMENTAL)"
|
||||
depends on EXPERIMENTAL && MODULES
|
||||
help
|
||||
Kprobes allows you to trap at almost any kernel address and
|
||||
execute a callback function. register_kprobe() establishes
|
||||
|
|
|
@ -7,7 +7,7 @@ extra-y := head.o init_task.o vmlinux.lds
|
|||
obj-y := process.o semaphore.o signal.o entry.o traps.o irq.o \
|
||||
ptrace.o time.o ioport.o ldt.o setup.o i8259.o sys_i386.o \
|
||||
pci-dma.o i386_ksyms.o i387.o dmi_scan.o bootflag.o \
|
||||
quirks.o i8237.o
|
||||
quirks.o i8237.o topology.o
|
||||
|
||||
obj-y += cpu/
|
||||
obj-y += timers/
|
||||
|
|
|
@ -44,9 +44,6 @@ extern void __init clustered_apic_check(void);
|
|||
extern int gsi_irq_sharing(int gsi);
|
||||
#include <asm/proto.h>
|
||||
|
||||
static inline int acpi_madt_oem_check(char *oem_id, char *oem_table_id) { return 0; }
|
||||
|
||||
|
||||
#else /* X86 */
|
||||
|
||||
#ifdef CONFIG_X86_LOCAL_APIC
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
#include <linux/smp.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/percpu.h>
|
||||
#include <linux/bootmem.h>
|
||||
#include <asm/semaphore.h>
|
||||
#include <asm/processor.h>
|
||||
#include <asm/i387.h>
|
||||
|
@ -18,6 +19,9 @@
|
|||
|
||||
#include "cpu.h"
|
||||
|
||||
DEFINE_PER_CPU(struct Xgt_desc_struct, cpu_gdt_descr);
|
||||
EXPORT_PER_CPU_SYMBOL(cpu_gdt_descr);
|
||||
|
||||
DEFINE_PER_CPU(unsigned char, cpu_16bit_stack[CPU_16BIT_STACK_SIZE]);
|
||||
EXPORT_PER_CPU_SYMBOL(cpu_16bit_stack);
|
||||
|
||||
|
@ -571,8 +575,9 @@ void __devinit cpu_init(void)
|
|||
int cpu = smp_processor_id();
|
||||
struct tss_struct * t = &per_cpu(init_tss, cpu);
|
||||
struct thread_struct *thread = ¤t->thread;
|
||||
struct desc_struct *gdt = get_cpu_gdt_table(cpu);
|
||||
struct desc_struct *gdt;
|
||||
__u32 stk16_off = (__u32)&per_cpu(cpu_16bit_stack, cpu);
|
||||
struct Xgt_desc_struct *cpu_gdt_descr = &per_cpu(cpu_gdt_descr, cpu);
|
||||
|
||||
if (cpu_test_and_set(cpu, cpu_initialized)) {
|
||||
printk(KERN_WARNING "CPU#%d already initialized!\n", cpu);
|
||||
|
@ -589,6 +594,25 @@ void __devinit cpu_init(void)
|
|||
set_in_cr4(X86_CR4_TSD);
|
||||
}
|
||||
|
||||
/*
|
||||
* This is a horrible hack to allocate the GDT. The problem
|
||||
* is that cpu_init() is called really early for the boot CPU
|
||||
* (and hence needs bootmem) but much later for the secondary
|
||||
* CPUs, when bootmem will have gone away
|
||||
*/
|
||||
if (NODE_DATA(0)->bdata->node_bootmem_map) {
|
||||
gdt = (struct desc_struct *)alloc_bootmem_pages(PAGE_SIZE);
|
||||
/* alloc_bootmem_pages panics on failure, so no check */
|
||||
memset(gdt, 0, PAGE_SIZE);
|
||||
} else {
|
||||
gdt = (struct desc_struct *)get_zeroed_page(GFP_KERNEL);
|
||||
if (unlikely(!gdt)) {
|
||||
printk(KERN_CRIT "CPU%d failed to allocate GDT\n", cpu);
|
||||
for (;;)
|
||||
local_irq_enable();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Initialize the per-CPU GDT with the boot GDT,
|
||||
* and set up the GDT descriptor:
|
||||
|
@ -601,10 +625,10 @@ void __devinit cpu_init(void)
|
|||
((((__u64)stk16_off) << 32) & 0xff00000000000000ULL) |
|
||||
(CPU_16BIT_STACK_SIZE - 1);
|
||||
|
||||
cpu_gdt_descr[cpu].size = GDT_SIZE - 1;
|
||||
cpu_gdt_descr[cpu].address = (unsigned long)gdt;
|
||||
cpu_gdt_descr->size = GDT_SIZE - 1;
|
||||
cpu_gdt_descr->address = (unsigned long)gdt;
|
||||
|
||||
load_gdt(&cpu_gdt_descr[cpu]);
|
||||
load_gdt(cpu_gdt_descr);
|
||||
load_idt(&idt_descr);
|
||||
|
||||
/*
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
#include <linux/kernel.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/init.h>
|
||||
#include <asm/processor.h>
|
||||
#include <asm/msr.h>
|
||||
|
|
|
@ -103,17 +103,19 @@ static void efi_call_phys_prelog(void)
|
|||
*/
|
||||
local_flush_tlb();
|
||||
|
||||
cpu_gdt_descr[0].address = __pa(cpu_gdt_descr[0].address);
|
||||
load_gdt((struct Xgt_desc_struct *) __pa(&cpu_gdt_descr[0]));
|
||||
per_cpu(cpu_gdt_descr, 0).address =
|
||||
__pa(per_cpu(cpu_gdt_descr, 0).address);
|
||||
load_gdt((struct Xgt_desc_struct *)__pa(&per_cpu(cpu_gdt_descr, 0)));
|
||||
}
|
||||
|
||||
static void efi_call_phys_epilog(void)
|
||||
{
|
||||
unsigned long cr4;
|
||||
|
||||
cpu_gdt_descr[0].address =
|
||||
(unsigned long) __va(cpu_gdt_descr[0].address);
|
||||
load_gdt(&cpu_gdt_descr[0]);
|
||||
per_cpu(cpu_gdt_descr, 0).address =
|
||||
(unsigned long)__va(per_cpu(cpu_gdt_descr, 0).address);
|
||||
load_gdt((struct Xgt_desc_struct *)__va(&per_cpu(cpu_gdt_descr, 0)));
|
||||
|
||||
cr4 = read_cr4();
|
||||
|
||||
if (cr4 & X86_CR4_PSE) {
|
||||
|
|
|
@ -534,5 +534,3 @@ ENTRY(cpu_gdt_table)
|
|||
.quad 0x0000000000000000 /* 0xf0 - unused */
|
||||
.quad 0x0000000000000000 /* 0xf8 - GDT entry 31: double-fault TSS */
|
||||
|
||||
/* Be sure this is zeroed to avoid false validations in Xen */
|
||||
.fill PAGE_SIZE_asm / 8 - GDT_ENTRIES,8,0
|
||||
|
|
|
@ -3,8 +3,6 @@
|
|||
#include <asm/checksum.h>
|
||||
#include <asm/desc.h>
|
||||
|
||||
EXPORT_SYMBOL_GPL(cpu_gdt_descr);
|
||||
|
||||
EXPORT_SYMBOL(__down_failed);
|
||||
EXPORT_SYMBOL(__down_failed_interruptible);
|
||||
EXPORT_SYMBOL(__down_failed_trylock);
|
||||
|
|
|
@ -2566,8 +2566,10 @@ int __init io_apic_get_unique_id (int ioapic, int apic_id)
|
|||
spin_unlock_irqrestore(&ioapic_lock, flags);
|
||||
|
||||
/* Sanity check */
|
||||
if (reg_00.bits.ID != apic_id)
|
||||
panic("IOAPIC[%d]: Unable change apic_id!\n", ioapic);
|
||||
if (reg_00.bits.ID != apic_id) {
|
||||
printk("IOAPIC[%d]: Unable to change apic_id!\n", ioapic);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
apic_printk(APIC_VERBOSE, KERN_INFO
|
||||
|
|
|
@ -58,6 +58,11 @@ static inline int is_IF_modifier(kprobe_opcode_t opcode)
|
|||
|
||||
int __kprobes arch_prepare_kprobe(struct kprobe *p)
|
||||
{
|
||||
/* insn: must be on special executable page on i386. */
|
||||
p->ainsn.insn = get_insn_slot();
|
||||
if (!p->ainsn.insn)
|
||||
return -ENOMEM;
|
||||
|
||||
memcpy(p->ainsn.insn, p->addr, MAX_INSN_SIZE * sizeof(kprobe_opcode_t));
|
||||
p->opcode = *p->addr;
|
||||
return 0;
|
||||
|
@ -77,6 +82,13 @@ void __kprobes arch_disarm_kprobe(struct kprobe *p)
|
|||
(unsigned long) p->addr + sizeof(kprobe_opcode_t));
|
||||
}
|
||||
|
||||
void __kprobes arch_remove_kprobe(struct kprobe *p)
|
||||
{
|
||||
down(&kprobe_mutex);
|
||||
free_insn_slot(p->ainsn.insn);
|
||||
up(&kprobe_mutex);
|
||||
}
|
||||
|
||||
static inline void save_previous_kprobe(struct kprobe_ctlblk *kcb)
|
||||
{
|
||||
kcb->prev_kprobe.kp = kprobe_running();
|
||||
|
@ -111,7 +123,7 @@ static inline void prepare_singlestep(struct kprobe *p, struct pt_regs *regs)
|
|||
if (p->opcode == BREAKPOINT_INSTRUCTION)
|
||||
regs->eip = (unsigned long)p->addr;
|
||||
else
|
||||
regs->eip = (unsigned long)&p->ainsn.insn;
|
||||
regs->eip = (unsigned long)p->ainsn.insn;
|
||||
}
|
||||
|
||||
/* Called with kretprobe_lock held */
|
||||
|
@ -351,7 +363,7 @@ static void __kprobes resume_execution(struct kprobe *p,
|
|||
{
|
||||
unsigned long *tos = (unsigned long *)®s->esp;
|
||||
unsigned long next_eip = 0;
|
||||
unsigned long copy_eip = (unsigned long)&p->ainsn.insn;
|
||||
unsigned long copy_eip = (unsigned long)p->ainsn.insn;
|
||||
unsigned long orig_eip = (unsigned long)p->addr;
|
||||
|
||||
switch (p->ainsn.insn[0]) {
|
||||
|
|
|
@ -710,7 +710,7 @@ void __init get_smp_config (void)
|
|||
* Read the physical hardware table. Anything here will
|
||||
* override the defaults.
|
||||
*/
|
||||
if (!smp_read_mpc((void *)mpf->mpf_physptr)) {
|
||||
if (!smp_read_mpc(phys_to_virt(mpf->mpf_physptr))) {
|
||||
smp_found_config = 0;
|
||||
printk(KERN_ERR "BIOS bug, MP table errors detected!...\n");
|
||||
printk(KERN_ERR "... disabling SMP support. (tell your hw vendor)\n");
|
||||
|
@ -915,6 +915,7 @@ void __init mp_register_ioapic (
|
|||
u32 gsi_base)
|
||||
{
|
||||
int idx = 0;
|
||||
int tmpid;
|
||||
|
||||
if (nr_ioapics >= MAX_IO_APICS) {
|
||||
printk(KERN_ERR "ERROR: Max # of I/O APICs (%d) exceeded "
|
||||
|
@ -935,9 +936,14 @@ void __init mp_register_ioapic (
|
|||
|
||||
set_fixmap_nocache(FIX_IO_APIC_BASE_0 + idx, address);
|
||||
if ((boot_cpu_data.x86_vendor == X86_VENDOR_INTEL) && (boot_cpu_data.x86 < 15))
|
||||
mp_ioapics[idx].mpc_apicid = io_apic_get_unique_id(idx, id);
|
||||
tmpid = io_apic_get_unique_id(idx, id);
|
||||
else
|
||||
mp_ioapics[idx].mpc_apicid = id;
|
||||
tmpid = id;
|
||||
if (tmpid == -1) {
|
||||
nr_ioapics--;
|
||||
return;
|
||||
}
|
||||
mp_ioapics[idx].mpc_apicid = tmpid;
|
||||
mp_ioapics[idx].mpc_apicver = io_apic_get_version(idx);
|
||||
|
||||
/*
|
||||
|
|
|
@ -898,12 +898,6 @@ static int __devinit do_boot_cpu(int apicid, int cpu)
|
|||
unsigned long start_eip;
|
||||
unsigned short nmi_high = 0, nmi_low = 0;
|
||||
|
||||
if (!cpu_gdt_descr[cpu].address &&
|
||||
!(cpu_gdt_descr[cpu].address = get_zeroed_page(GFP_KERNEL))) {
|
||||
printk("Failed to allocate GDT for CPU %d\n", cpu);
|
||||
return 1;
|
||||
}
|
||||
|
||||
++cpucount;
|
||||
|
||||
/*
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
/*
|
||||
* arch/i386/mach-generic/topology.c - Populate driverfs with topology information
|
||||
* arch/i386/kernel/topology.c - Populate driverfs with topology information
|
||||
*
|
||||
* Written by: Matthew Dobson, IBM Corporation
|
||||
* Original Code: Paul Dorwin, IBM Corporation, Patrick Mochel, OSDL
|
||||
*
|
||||
* Copyright (C) 2002, IBM Corp.
|
||||
*
|
||||
* All rights reserved.
|
||||
* All rights reserved.
|
||||
*
|
||||
* 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
|
||||
|
@ -34,7 +34,7 @@ static struct i386_cpu cpu_devices[NR_CPUS];
|
|||
|
||||
int arch_register_cpu(int num){
|
||||
struct node *parent = NULL;
|
||||
|
||||
|
||||
#ifdef CONFIG_NUMA
|
||||
int node = cpu_to_node(num);
|
||||
if (node_online(node))
|
|
@ -2,4 +2,4 @@
|
|||
# Makefile for the linux kernel.
|
||||
#
|
||||
|
||||
obj-y := setup.o topology.o
|
||||
obj-y := setup.o
|
||||
|
|
|
@ -23,6 +23,8 @@
|
|||
#include <linux/delay.h>
|
||||
#include <linux/reboot.h>
|
||||
#include <linux/sysrq.h>
|
||||
#include <linux/smp.h>
|
||||
#include <linux/nodemask.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/voyager.h>
|
||||
#include <asm/vic.h>
|
||||
|
@ -328,4 +330,3 @@ void machine_power_off(void)
|
|||
if (pm_power_off)
|
||||
pm_power_off();
|
||||
}
|
||||
|
||||
|
|
|
@ -402,6 +402,7 @@ find_smp_config(void)
|
|||
cpus_addr(phys_cpu_present_map)[0] |= voyager_extended_cmos_read(VOYAGER_PROCESSOR_PRESENT_MASK + 1) << 8;
|
||||
cpus_addr(phys_cpu_present_map)[0] |= voyager_extended_cmos_read(VOYAGER_PROCESSOR_PRESENT_MASK + 2) << 16;
|
||||
cpus_addr(phys_cpu_present_map)[0] |= voyager_extended_cmos_read(VOYAGER_PROCESSOR_PRESENT_MASK + 3) << 24;
|
||||
cpu_possible_map = phys_cpu_present_map;
|
||||
printk("VOYAGER SMP: phys_cpu_present_map = 0x%lx\n", cpus_addr(phys_cpu_present_map)[0]);
|
||||
/* Here we set up the VIC to enable SMP */
|
||||
/* enable the CPIs by writing the base vector to their register */
|
||||
|
|
|
@ -453,6 +453,7 @@ source "arch/ia64/oprofile/Kconfig"
|
|||
|
||||
config KPROBES
|
||||
bool "Kprobes (EXPERIMENTAL)"
|
||||
depends on EXPERIMENTAL && MODULES
|
||||
help
|
||||
Kprobes allows you to trap at almost any kernel address and
|
||||
execute a callback function. register_kprobe() establishes
|
||||
|
|
|
@ -761,6 +761,59 @@ int acpi_map_cpu2node(acpi_handle handle, int cpu, long physid)
|
|||
return (0);
|
||||
}
|
||||
|
||||
int additional_cpus __initdata = -1;
|
||||
|
||||
static __init int setup_additional_cpus(char *s)
|
||||
{
|
||||
if (s)
|
||||
additional_cpus = simple_strtol(s, NULL, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
early_param("additional_cpus", setup_additional_cpus);
|
||||
|
||||
/*
|
||||
* cpu_possible_map should be static, it cannot change as cpu's
|
||||
* are onlined, or offlined. The reason is per-cpu data-structures
|
||||
* are allocated by some modules at init time, and dont expect to
|
||||
* do this dynamically on cpu arrival/departure.
|
||||
* cpu_present_map on the other hand can change dynamically.
|
||||
* In case when cpu_hotplug is not compiled, then we resort to current
|
||||
* behaviour, which is cpu_possible == cpu_present.
|
||||
* - Ashok Raj
|
||||
*
|
||||
* Three ways to find out the number of additional hotplug CPUs:
|
||||
* - If the BIOS specified disabled CPUs in ACPI/mptables use that.
|
||||
* - The user can overwrite it with additional_cpus=NUM
|
||||
* - Otherwise don't reserve additional CPUs.
|
||||
*/
|
||||
__init void prefill_possible_map(void)
|
||||
{
|
||||
int i;
|
||||
int possible, disabled_cpus;
|
||||
|
||||
disabled_cpus = total_cpus - available_cpus;
|
||||
|
||||
if (additional_cpus == -1) {
|
||||
if (disabled_cpus > 0)
|
||||
additional_cpus = disabled_cpus;
|
||||
else
|
||||
additional_cpus = 0;
|
||||
}
|
||||
|
||||
possible = available_cpus + additional_cpus;
|
||||
|
||||
if (possible > NR_CPUS)
|
||||
possible = NR_CPUS;
|
||||
|
||||
printk(KERN_INFO "SMP: Allowing %d CPUs, %d hotplug CPUs\n",
|
||||
possible, max((possible - available_cpus), 0));
|
||||
|
||||
for (i = 0; i < possible; i++)
|
||||
cpu_set(i, cpu_possible_map);
|
||||
}
|
||||
|
||||
int acpi_map_lsapic(acpi_handle handle, int *pcpu)
|
||||
{
|
||||
struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
|
||||
|
|
|
@ -569,7 +569,9 @@ GLOBAL_ENTRY(ia64_trace_syscall)
|
|||
.mem.offset 0,0; st8.spill [r2]=r8 // store return value in slot for r8
|
||||
.mem.offset 8,0; st8.spill [r3]=r10 // clear error indication in slot for r10
|
||||
br.call.sptk.many rp=syscall_trace_leave // give parent a chance to catch return value
|
||||
.ret3: br.cond.sptk .work_pending_syscall_end
|
||||
.ret3:
|
||||
(pUStk) cmp.eq.unc p6,p0=r0,r0 // p6 <- pUStk
|
||||
br.cond.sptk .work_pending_syscall_end
|
||||
|
||||
strace_error:
|
||||
ld8 r3=[r2] // load pt_regs.r8
|
||||
|
|
|
@ -10,23 +10,8 @@
|
|||
|
||||
#include <linux/string.h>
|
||||
EXPORT_SYMBOL(memset);
|
||||
EXPORT_SYMBOL(memchr);
|
||||
EXPORT_SYMBOL(memcmp);
|
||||
EXPORT_SYMBOL(memcpy);
|
||||
EXPORT_SYMBOL(memmove);
|
||||
EXPORT_SYMBOL(memscan);
|
||||
EXPORT_SYMBOL(strcat);
|
||||
EXPORT_SYMBOL(strchr);
|
||||
EXPORT_SYMBOL(strcmp);
|
||||
EXPORT_SYMBOL(strcpy);
|
||||
EXPORT_SYMBOL(strlen);
|
||||
EXPORT_SYMBOL(strncat);
|
||||
EXPORT_SYMBOL(strncmp);
|
||||
EXPORT_SYMBOL(strncpy);
|
||||
EXPORT_SYMBOL(strnlen);
|
||||
EXPORT_SYMBOL(strrchr);
|
||||
EXPORT_SYMBOL(strstr);
|
||||
EXPORT_SYMBOL(strpbrk);
|
||||
|
||||
#include <asm/checksum.h>
|
||||
EXPORT_SYMBOL(ip_fast_csum); /* hand-coded assembly */
|
||||
|
|
|
@ -430,6 +430,7 @@ setup_arch (char **cmdline_p)
|
|||
if (early_console_setup(*cmdline_p) == 0)
|
||||
mark_bsp_online();
|
||||
|
||||
parse_early_param();
|
||||
#ifdef CONFIG_ACPI
|
||||
/* Initialize the ACPI boot-time table parser */
|
||||
acpi_table_init();
|
||||
|
@ -688,6 +689,9 @@ void
|
|||
setup_per_cpu_areas (void)
|
||||
{
|
||||
/* start_kernel() requires this... */
|
||||
#ifdef CONFIG_ACPI_HOTPLUG_CPU
|
||||
prefill_possible_map();
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -129,7 +129,7 @@ DEFINE_PER_CPU(int, cpu_state);
|
|||
/* Bitmasks of currently online, and possible CPUs */
|
||||
cpumask_t cpu_online_map;
|
||||
EXPORT_SYMBOL(cpu_online_map);
|
||||
cpumask_t cpu_possible_map;
|
||||
cpumask_t cpu_possible_map = CPU_MASK_NONE;
|
||||
EXPORT_SYMBOL(cpu_possible_map);
|
||||
|
||||
cpumask_t cpu_core_map[NR_CPUS] __cacheline_aligned;
|
||||
|
@ -506,9 +506,6 @@ smp_build_cpu_map (void)
|
|||
|
||||
for (cpu = 0; cpu < NR_CPUS; cpu++) {
|
||||
ia64_cpu_to_sapicid[cpu] = -1;
|
||||
#ifdef CONFIG_HOTPLUG_CPU
|
||||
cpu_set(cpu, cpu_possible_map);
|
||||
#endif
|
||||
}
|
||||
|
||||
ia64_cpu_to_sapicid[0] = boot_cpu_id;
|
||||
|
|
|
@ -250,32 +250,27 @@ time_init (void)
|
|||
set_normalized_timespec(&wall_to_monotonic, -xtime.tv_sec, -xtime.tv_nsec);
|
||||
}
|
||||
|
||||
#define SMALLUSECS 100
|
||||
/*
|
||||
* Generic udelay assumes that if preemption is allowed and the thread
|
||||
* migrates to another CPU, that the ITC values are synchronized across
|
||||
* all CPUs.
|
||||
*/
|
||||
static void
|
||||
ia64_itc_udelay (unsigned long usecs)
|
||||
{
|
||||
unsigned long start = ia64_get_itc();
|
||||
unsigned long end = start + usecs*local_cpu_data->cyc_per_usec;
|
||||
|
||||
while (time_before(ia64_get_itc(), end))
|
||||
cpu_relax();
|
||||
}
|
||||
|
||||
void (*ia64_udelay)(unsigned long usecs) = &ia64_itc_udelay;
|
||||
|
||||
void
|
||||
udelay (unsigned long usecs)
|
||||
{
|
||||
unsigned long start;
|
||||
unsigned long cycles;
|
||||
unsigned long smallusecs;
|
||||
|
||||
/*
|
||||
* Execute the non-preemptible delay loop (because the ITC might
|
||||
* not be synchronized between CPUS) in relatively short time
|
||||
* chunks, allowing preemption between the chunks.
|
||||
*/
|
||||
while (usecs > 0) {
|
||||
smallusecs = (usecs > SMALLUSECS) ? SMALLUSECS : usecs;
|
||||
preempt_disable();
|
||||
cycles = smallusecs*local_cpu_data->cyc_per_usec;
|
||||
start = ia64_get_itc();
|
||||
|
||||
while (ia64_get_itc() - start < cycles)
|
||||
cpu_relax();
|
||||
|
||||
preempt_enable();
|
||||
usecs -= smallusecs;
|
||||
}
|
||||
(*ia64_udelay)(usecs);
|
||||
}
|
||||
EXPORT_SYMBOL(udelay);
|
||||
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
#include <linux/module.h> /* for EXPORT_SYMBOL */
|
||||
#include <linux/hardirq.h>
|
||||
#include <linux/kprobes.h>
|
||||
#include <linux/delay.h> /* for ssleep() */
|
||||
|
||||
#include <asm/fpswa.h>
|
||||
#include <asm/ia32.h>
|
||||
|
@ -116,6 +117,13 @@ die (const char *str, struct pt_regs *regs, long err)
|
|||
bust_spinlocks(0);
|
||||
die.lock_owner = -1;
|
||||
spin_unlock_irq(&die.lock);
|
||||
|
||||
if (panic_on_oops) {
|
||||
printk(KERN_EMERG "Fatal exception: panic in 5 seconds\n");
|
||||
ssleep(5);
|
||||
panic("Fatal exception");
|
||||
}
|
||||
|
||||
do_exit(SIGSEGV);
|
||||
}
|
||||
|
||||
|
|
|
@ -23,6 +23,10 @@
|
|||
#include "xtalk/hubdev.h"
|
||||
#include "xtalk/xwidgetdev.h"
|
||||
|
||||
|
||||
extern void sn_init_cpei_timer(void);
|
||||
extern void register_sn_procfs(void);
|
||||
|
||||
static struct list_head sn_sysdata_list;
|
||||
|
||||
/* sysdata list struct */
|
||||
|
@ -40,12 +44,12 @@ struct brick {
|
|||
struct slab_info slab_info[MAX_SLABS + 1];
|
||||
};
|
||||
|
||||
int sn_ioif_inited = 0; /* SN I/O infrastructure initialized? */
|
||||
int sn_ioif_inited; /* SN I/O infrastructure initialized? */
|
||||
|
||||
struct sn_pcibus_provider *sn_pci_provider[PCIIO_ASIC_MAX_TYPES]; /* indexed by asic type */
|
||||
|
||||
static int max_segment_number = 0; /* Default highest segment number */
|
||||
static int max_pcibus_number = 255; /* Default highest pci bus number */
|
||||
static int max_segment_number; /* Default highest segment number */
|
||||
static int max_pcibus_number = 255; /* Default highest pci bus number */
|
||||
|
||||
/*
|
||||
* Hooks and struct for unsupported pci providers
|
||||
|
@ -84,7 +88,6 @@ static inline u64
|
|||
sal_get_device_dmaflush_list(u64 nasid, u64 widget_num, u64 device_num,
|
||||
u64 address)
|
||||
{
|
||||
|
||||
struct ia64_sal_retval ret_stuff;
|
||||
ret_stuff.status = 0;
|
||||
ret_stuff.v0 = 0;
|
||||
|
@ -94,7 +97,6 @@ sal_get_device_dmaflush_list(u64 nasid, u64 widget_num, u64 device_num,
|
|||
(u64) nasid, (u64) widget_num,
|
||||
(u64) device_num, (u64) address, 0, 0, 0);
|
||||
return ret_stuff.status;
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -102,7 +104,6 @@ sal_get_device_dmaflush_list(u64 nasid, u64 widget_num, u64 device_num,
|
|||
*/
|
||||
static inline u64 sal_get_hubdev_info(u64 handle, u64 address)
|
||||
{
|
||||
|
||||
struct ia64_sal_retval ret_stuff;
|
||||
ret_stuff.status = 0;
|
||||
ret_stuff.v0 = 0;
|
||||
|
@ -118,7 +119,6 @@ static inline u64 sal_get_hubdev_info(u64 handle, u64 address)
|
|||
*/
|
||||
static inline u64 sal_get_pcibus_info(u64 segment, u64 busnum, u64 address)
|
||||
{
|
||||
|
||||
struct ia64_sal_retval ret_stuff;
|
||||
ret_stuff.status = 0;
|
||||
ret_stuff.v0 = 0;
|
||||
|
@ -215,7 +215,7 @@ static void __init sn_fixup_ionodes(void)
|
|||
struct hubdev_info *hubdev;
|
||||
u64 status;
|
||||
u64 nasid;
|
||||
int i, widget, device;
|
||||
int i, widget, device, size;
|
||||
|
||||
/*
|
||||
* Get SGI Specific HUB chipset information.
|
||||
|
@ -251,48 +251,37 @@ static void __init sn_fixup_ionodes(void)
|
|||
if (!hubdev->hdi_flush_nasid_list.widget_p)
|
||||
continue;
|
||||
|
||||
size = (HUB_WIDGET_ID_MAX + 1) *
|
||||
sizeof(struct sn_flush_device_kernel *);
|
||||
hubdev->hdi_flush_nasid_list.widget_p =
|
||||
kmalloc((HUB_WIDGET_ID_MAX + 1) *
|
||||
sizeof(struct sn_flush_device_kernel *),
|
||||
GFP_KERNEL);
|
||||
memset(hubdev->hdi_flush_nasid_list.widget_p, 0x0,
|
||||
(HUB_WIDGET_ID_MAX + 1) *
|
||||
sizeof(struct sn_flush_device_kernel *));
|
||||
kzalloc(size, GFP_KERNEL);
|
||||
if (!hubdev->hdi_flush_nasid_list.widget_p)
|
||||
BUG();
|
||||
|
||||
for (widget = 0; widget <= HUB_WIDGET_ID_MAX; widget++) {
|
||||
sn_flush_device_kernel = kmalloc(DEV_PER_WIDGET *
|
||||
sizeof(struct
|
||||
sn_flush_device_kernel),
|
||||
GFP_KERNEL);
|
||||
size = DEV_PER_WIDGET *
|
||||
sizeof(struct sn_flush_device_kernel);
|
||||
sn_flush_device_kernel = kzalloc(size, GFP_KERNEL);
|
||||
if (!sn_flush_device_kernel)
|
||||
BUG();
|
||||
memset(sn_flush_device_kernel, 0x0,
|
||||
DEV_PER_WIDGET *
|
||||
sizeof(struct sn_flush_device_kernel));
|
||||
|
||||
dev_entry = sn_flush_device_kernel;
|
||||
for (device = 0; device < DEV_PER_WIDGET;
|
||||
device++,dev_entry++) {
|
||||
dev_entry->common = kmalloc(sizeof(struct
|
||||
sn_flush_device_common),
|
||||
GFP_KERNEL);
|
||||
size = sizeof(struct sn_flush_device_common);
|
||||
dev_entry->common = kzalloc(size, GFP_KERNEL);
|
||||
if (!dev_entry->common)
|
||||
BUG();
|
||||
memset(dev_entry->common, 0x0, sizeof(struct
|
||||
sn_flush_device_common));
|
||||
|
||||
if (sn_prom_feature_available(
|
||||
PRF_DEVICE_FLUSH_LIST))
|
||||
status = sal_get_device_dmaflush_list(
|
||||
nasid,
|
||||
widget,
|
||||
device,
|
||||
(u64)(dev_entry->common));
|
||||
nasid, widget, device,
|
||||
(u64)(dev_entry->common));
|
||||
else
|
||||
status = sn_device_fixup_war(nasid,
|
||||
widget,
|
||||
device,
|
||||
dev_entry->common);
|
||||
widget, device,
|
||||
dev_entry->common);
|
||||
if (status != SALRET_OK)
|
||||
panic("SAL call failed: %s\n",
|
||||
ia64_sal_strerror(status));
|
||||
|
@ -383,13 +372,12 @@ void sn_pci_fixup_slot(struct pci_dev *dev)
|
|||
|
||||
pci_dev_get(dev); /* for the sysdata pointer */
|
||||
pcidev_info = kzalloc(sizeof(struct pcidev_info), GFP_KERNEL);
|
||||
if (pcidev_info <= 0)
|
||||
if (!pcidev_info)
|
||||
BUG(); /* Cannot afford to run out of memory */
|
||||
|
||||
sn_irq_info = kmalloc(sizeof(struct sn_irq_info), GFP_KERNEL);
|
||||
if (sn_irq_info <= 0)
|
||||
sn_irq_info = kzalloc(sizeof(struct sn_irq_info), GFP_KERNEL);
|
||||
if (!sn_irq_info)
|
||||
BUG(); /* Cannot afford to run out of memory */
|
||||
memset(sn_irq_info, 0, sizeof(struct sn_irq_info));
|
||||
|
||||
/* Call to retrieve pci device information needed by kernel. */
|
||||
status = sal_get_pcidev_info((u64) segment, (u64) dev->bus->number,
|
||||
|
@ -482,13 +470,13 @@ void sn_pci_fixup_slot(struct pci_dev *dev)
|
|||
*/
|
||||
void sn_pci_controller_fixup(int segment, int busnum, struct pci_bus *bus)
|
||||
{
|
||||
int status = 0;
|
||||
int status;
|
||||
int nasid, cnode;
|
||||
struct pci_controller *controller;
|
||||
struct sn_pci_controller *sn_controller;
|
||||
struct pcibus_bussoft *prom_bussoft_ptr;
|
||||
struct hubdev_info *hubdev_info;
|
||||
void *provider_soft = NULL;
|
||||
void *provider_soft;
|
||||
struct sn_pcibus_provider *provider;
|
||||
|
||||
status = sal_get_pcibus_info((u64) segment, (u64) busnum,
|
||||
|
@ -535,6 +523,8 @@ void sn_pci_controller_fixup(int segment, int busnum, struct pci_bus *bus)
|
|||
bus->sysdata = controller;
|
||||
if (provider->bus_fixup)
|
||||
provider_soft = (*provider->bus_fixup) (prom_bussoft_ptr, controller);
|
||||
else
|
||||
provider_soft = NULL;
|
||||
|
||||
if (provider_soft == NULL) {
|
||||
/* fixup failed or not applicable */
|
||||
|
@ -638,13 +628,8 @@ void sn_bus_free_sysdata(void)
|
|||
|
||||
static int __init sn_pci_init(void)
|
||||
{
|
||||
int i = 0;
|
||||
int j = 0;
|
||||
int i, j;
|
||||
struct pci_dev *pci_dev = NULL;
|
||||
extern void sn_init_cpei_timer(void);
|
||||
#ifdef CONFIG_PROC_FS
|
||||
extern void register_sn_procfs(void);
|
||||
#endif
|
||||
|
||||
if (!ia64_platform_is("sn2") || IS_RUNNING_ON_FAKE_PROM())
|
||||
return 0;
|
||||
|
@ -700,32 +685,29 @@ static int __init sn_pci_init(void)
|
|||
*/
|
||||
void hubdev_init_node(nodepda_t * npda, cnodeid_t node)
|
||||
{
|
||||
|
||||
struct hubdev_info *hubdev_info;
|
||||
int size;
|
||||
pg_data_t *pg;
|
||||
|
||||
size = sizeof(struct hubdev_info);
|
||||
|
||||
if (node >= num_online_nodes()) /* Headless/memless IO nodes */
|
||||
hubdev_info =
|
||||
(struct hubdev_info *)alloc_bootmem_node(NODE_DATA(0),
|
||||
sizeof(struct
|
||||
hubdev_info));
|
||||
pg = NODE_DATA(0);
|
||||
else
|
||||
hubdev_info =
|
||||
(struct hubdev_info *)alloc_bootmem_node(NODE_DATA(node),
|
||||
sizeof(struct
|
||||
hubdev_info));
|
||||
npda->pdinfo = (void *)hubdev_info;
|
||||
pg = NODE_DATA(node);
|
||||
|
||||
hubdev_info = (struct hubdev_info *)alloc_bootmem_node(pg, size);
|
||||
|
||||
npda->pdinfo = (void *)hubdev_info;
|
||||
}
|
||||
|
||||
geoid_t
|
||||
cnodeid_get_geoid(cnodeid_t cnode)
|
||||
{
|
||||
|
||||
struct hubdev_info *hubdev;
|
||||
|
||||
hubdev = (struct hubdev_info *)(NODEPDA(cnode)->pdinfo);
|
||||
return hubdev->hdi_geoid;
|
||||
|
||||
}
|
||||
|
||||
subsys_initcall(sn_pci_init);
|
||||
|
@ -734,3 +716,4 @@ EXPORT_SYMBOL(sn_pci_unfixup_slot);
|
|||
EXPORT_SYMBOL(sn_pci_controller_fixup);
|
||||
EXPORT_SYMBOL(sn_bus_store_sysdata);
|
||||
EXPORT_SYMBOL(sn_bus_free_sysdata);
|
||||
EXPORT_SYMBOL(sn_pcidev_info_get);
|
||||
|
|
|
@ -75,7 +75,7 @@ EXPORT_SYMBOL(sn_rtc_cycles_per_second);
|
|||
DEFINE_PER_CPU(struct sn_hub_info_s, __sn_hub_info);
|
||||
EXPORT_PER_CPU_SYMBOL(__sn_hub_info);
|
||||
|
||||
DEFINE_PER_CPU(short, __sn_cnodeid_to_nasid[MAX_NUMNODES]);
|
||||
DEFINE_PER_CPU(short, __sn_cnodeid_to_nasid[MAX_COMPACT_NODES]);
|
||||
EXPORT_PER_CPU_SYMBOL(__sn_cnodeid_to_nasid);
|
||||
|
||||
DEFINE_PER_CPU(struct nodepda_s *, __sn_nodepda);
|
||||
|
@ -317,6 +317,7 @@ struct pcdp_vga_device {
|
|||
#define PCDP_PCI_TRANS_IOPORT 0x02
|
||||
#define PCDP_PCI_TRANS_MMIO 0x01
|
||||
|
||||
#if defined(CONFIG_VT) && defined(CONFIG_VGA_CONSOLE)
|
||||
static void
|
||||
sn_scan_pcdp(void)
|
||||
{
|
||||
|
@ -358,6 +359,7 @@ sn_scan_pcdp(void)
|
|||
break; /* once we find the primary, we're done */
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
static unsigned long sn2_rtc_initial;
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (C) 1999,2001-2004 Silicon Graphics, Inc. All Rights Reserved.
|
||||
* Copyright (C) 1999,2001-2004, 2006 Silicon Graphics, Inc. All Rights Reserved.
|
||||
*
|
||||
* Module to export the system's Firmware Interface Tables, including
|
||||
* PROM revision numbers and banners, in /proc
|
||||
|
@ -190,7 +190,7 @@ static int
|
|||
read_version_entry(char *page, char **start, off_t off, int count, int *eof,
|
||||
void *data)
|
||||
{
|
||||
int len = 0;
|
||||
int len;
|
||||
|
||||
/* data holds the NASID of the node */
|
||||
len = dump_version(page, (unsigned long)data);
|
||||
|
@ -202,7 +202,7 @@ static int
|
|||
read_fit_entry(char *page, char **start, off_t off, int count, int *eof,
|
||||
void *data)
|
||||
{
|
||||
int len = 0;
|
||||
int len;
|
||||
|
||||
/* data holds the NASID of the node */
|
||||
len = dump_fit(page, (unsigned long)data);
|
||||
|
@ -229,13 +229,16 @@ int __init prominfo_init(void)
|
|||
struct proc_dir_entry *p;
|
||||
cnodeid_t cnodeid;
|
||||
unsigned long nasid;
|
||||
int size;
|
||||
char name[NODE_NAME_LEN];
|
||||
|
||||
if (!ia64_platform_is("sn2"))
|
||||
return 0;
|
||||
|
||||
proc_entries = kmalloc(num_online_nodes() * sizeof(struct proc_dir_entry *),
|
||||
GFP_KERNEL);
|
||||
size = num_online_nodes() * sizeof(struct proc_dir_entry *);
|
||||
proc_entries = kzalloc(size, GFP_KERNEL);
|
||||
if (!proc_entries)
|
||||
return -ENOMEM;
|
||||
|
||||
sgi_prominfo_entry = proc_mkdir("sgi_prominfo", NULL);
|
||||
|
||||
|
@ -244,14 +247,12 @@ int __init prominfo_init(void)
|
|||
sprintf(name, "node%d", cnodeid);
|
||||
*entp = proc_mkdir(name, sgi_prominfo_entry);
|
||||
nasid = cnodeid_to_nasid(cnodeid);
|
||||
p = create_proc_read_entry(
|
||||
"fit", 0, *entp, read_fit_entry,
|
||||
(void *)nasid);
|
||||
p = create_proc_read_entry("fit", 0, *entp, read_fit_entry,
|
||||
(void *)nasid);
|
||||
if (p)
|
||||
p->owner = THIS_MODULE;
|
||||
p = create_proc_read_entry(
|
||||
"version", 0, *entp, read_version_entry,
|
||||
(void *)nasid);
|
||||
p = create_proc_read_entry("version", 0, *entp,
|
||||
read_version_entry, (void *)nasid);
|
||||
if (p)
|
||||
p->owner = THIS_MODULE;
|
||||
entp++;
|
||||
|
@ -263,7 +264,7 @@ int __init prominfo_init(void)
|
|||
void __exit prominfo_exit(void)
|
||||
{
|
||||
struct proc_dir_entry **entp;
|
||||
unsigned cnodeid;
|
||||
unsigned int cnodeid;
|
||||
char name[NODE_NAME_LEN];
|
||||
|
||||
entp = proc_entries;
|
||||
|
|
|
@ -46,8 +46,14 @@ DECLARE_PER_CPU(struct ptc_stats, ptcstats);
|
|||
|
||||
static __cacheline_aligned DEFINE_SPINLOCK(sn2_global_ptc_lock);
|
||||
|
||||
void sn2_ptc_deadlock_recovery(short *, short, short, int, volatile unsigned long *, unsigned long,
|
||||
volatile unsigned long *, unsigned long);
|
||||
extern unsigned long
|
||||
sn2_ptc_deadlock_recovery_core(volatile unsigned long *, unsigned long,
|
||||
volatile unsigned long *, unsigned long,
|
||||
volatile unsigned long *, unsigned long);
|
||||
void
|
||||
sn2_ptc_deadlock_recovery(short *, short, short, int,
|
||||
volatile unsigned long *, unsigned long,
|
||||
volatile unsigned long *, unsigned long);
|
||||
|
||||
/*
|
||||
* Note: some is the following is captured here to make degugging easier
|
||||
|
@ -59,16 +65,6 @@ void sn2_ptc_deadlock_recovery(short *, short, short, int, volatile unsigned lon
|
|||
#define reset_max_active_on_deadlock() 1
|
||||
#define PTC_LOCK(sh1) ((sh1) ? &sn2_global_ptc_lock : &sn_nodepda->ptc_lock)
|
||||
|
||||
static inline void ptc_lock(int sh1, unsigned long *flagp)
|
||||
{
|
||||
spin_lock_irqsave(PTC_LOCK(sh1), *flagp);
|
||||
}
|
||||
|
||||
static inline void ptc_unlock(int sh1, unsigned long flags)
|
||||
{
|
||||
spin_unlock_irqrestore(PTC_LOCK(sh1), flags);
|
||||
}
|
||||
|
||||
struct ptc_stats {
|
||||
unsigned long ptc_l;
|
||||
unsigned long change_rid;
|
||||
|
@ -82,6 +78,8 @@ struct ptc_stats {
|
|||
unsigned long shub_ptc_flushes_not_my_mm;
|
||||
};
|
||||
|
||||
#define sn2_ptctest 0
|
||||
|
||||
static inline unsigned long wait_piowc(void)
|
||||
{
|
||||
volatile unsigned long *piows;
|
||||
|
@ -200,7 +198,7 @@ sn2_global_tlb_purge(struct mm_struct *mm, unsigned long start,
|
|||
max_active = max_active_pio(shub1);
|
||||
|
||||
itc = ia64_get_itc();
|
||||
ptc_lock(shub1, &flags);
|
||||
spin_lock_irqsave(PTC_LOCK(shub1), flags);
|
||||
itc2 = ia64_get_itc();
|
||||
|
||||
__get_cpu_var(ptcstats).lock_itc_clocks += itc2 - itc;
|
||||
|
@ -258,7 +256,7 @@ sn2_global_tlb_purge(struct mm_struct *mm, unsigned long start,
|
|||
ia64_srlz_d();
|
||||
}
|
||||
|
||||
ptc_unlock(shub1, flags);
|
||||
spin_unlock_irqrestore(PTC_LOCK(shub1), flags);
|
||||
|
||||
preempt_enable();
|
||||
}
|
||||
|
@ -270,11 +268,12 @@ sn2_global_tlb_purge(struct mm_struct *mm, unsigned long start,
|
|||
* TLB flush transaction. The recovery sequence is somewhat tricky & is
|
||||
* coded in assembly language.
|
||||
*/
|
||||
void sn2_ptc_deadlock_recovery(short *nasids, short ib, short ie, int mynasid, volatile unsigned long *ptc0, unsigned long data0,
|
||||
volatile unsigned long *ptc1, unsigned long data1)
|
||||
|
||||
void
|
||||
sn2_ptc_deadlock_recovery(short *nasids, short ib, short ie, int mynasid,
|
||||
volatile unsigned long *ptc0, unsigned long data0,
|
||||
volatile unsigned long *ptc1, unsigned long data1)
|
||||
{
|
||||
extern unsigned long sn2_ptc_deadlock_recovery_core(volatile unsigned long *, unsigned long,
|
||||
volatile unsigned long *, unsigned long, volatile unsigned long *, unsigned long);
|
||||
short nasid, i;
|
||||
unsigned long *piows, zeroval, n;
|
||||
|
||||
|
|
|
@ -6,11 +6,11 @@
|
|||
* Copyright (C) 2000-2005 Silicon Graphics, Inc. All rights reserved.
|
||||
*/
|
||||
#include <linux/config.h>
|
||||
#include <asm/uaccess.h>
|
||||
|
||||
#ifdef CONFIG_PROC_FS
|
||||
#include <linux/proc_fs.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <asm/uaccess.h>
|
||||
#include <asm/sn/sn_sal.h>
|
||||
|
||||
static int partition_id_show(struct seq_file *s, void *p)
|
||||
|
@ -90,10 +90,10 @@ static int coherence_id_open(struct inode *inode, struct file *file)
|
|||
return single_open(file, coherence_id_show, NULL);
|
||||
}
|
||||
|
||||
static struct proc_dir_entry *sn_procfs_create_entry(
|
||||
const char *name, struct proc_dir_entry *parent,
|
||||
int (*openfunc)(struct inode *, struct file *),
|
||||
int (*releasefunc)(struct inode *, struct file *))
|
||||
static struct proc_dir_entry
|
||||
*sn_procfs_create_entry(const char *name, struct proc_dir_entry *parent,
|
||||
int (*openfunc)(struct inode *, struct file *),
|
||||
int (*releasefunc)(struct inode *, struct file *))
|
||||
{
|
||||
struct proc_dir_entry *e = create_proc_entry(name, 0444, parent);
|
||||
|
||||
|
@ -126,24 +126,24 @@ void register_sn_procfs(void)
|
|||
return;
|
||||
|
||||
sn_procfs_create_entry("partition_id", sgi_proc_dir,
|
||||
partition_id_open, single_release);
|
||||
partition_id_open, single_release);
|
||||
|
||||
sn_procfs_create_entry("system_serial_number", sgi_proc_dir,
|
||||
system_serial_number_open, single_release);
|
||||
system_serial_number_open, single_release);
|
||||
|
||||
sn_procfs_create_entry("licenseID", sgi_proc_dir,
|
||||
licenseID_open, single_release);
|
||||
licenseID_open, single_release);
|
||||
|
||||
e = sn_procfs_create_entry("sn_force_interrupt", sgi_proc_dir,
|
||||
sn_force_interrupt_open, single_release);
|
||||
sn_force_interrupt_open, single_release);
|
||||
if (e)
|
||||
e->proc_fops->write = sn_force_interrupt_write_proc;
|
||||
|
||||
sn_procfs_create_entry("coherence_id", sgi_proc_dir,
|
||||
coherence_id_open, single_release);
|
||||
coherence_id_open, single_release);
|
||||
|
||||
sn_procfs_create_entry("sn_topology", sgi_proc_dir,
|
||||
sn_topology_open, sn_topology_release);
|
||||
sn_topology_open, sn_topology_release);
|
||||
}
|
||||
|
||||
#endif /* CONFIG_PROC_FS */
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
|
||||
#include <asm/hw_irq.h>
|
||||
#include <asm/system.h>
|
||||
#include <asm/timex.h>
|
||||
|
||||
#include <asm/sn/leds.h>
|
||||
#include <asm/sn/shub_mmr.h>
|
||||
|
@ -28,9 +29,27 @@ static struct time_interpolator sn2_interpolator = {
|
|||
.source = TIME_SOURCE_MMIO64
|
||||
};
|
||||
|
||||
/*
|
||||
* sn udelay uses the RTC instead of the ITC because the ITC is not
|
||||
* synchronized across all CPUs, and the thread may migrate to another CPU
|
||||
* if preemption is enabled.
|
||||
*/
|
||||
static void
|
||||
ia64_sn_udelay (unsigned long usecs)
|
||||
{
|
||||
unsigned long start = rtc_time();
|
||||
unsigned long end = start +
|
||||
usecs * sn_rtc_cycles_per_second / 1000000;
|
||||
|
||||
while (time_before((unsigned long)rtc_time(), end))
|
||||
cpu_relax();
|
||||
}
|
||||
|
||||
void __init sn_timer_init(void)
|
||||
{
|
||||
sn2_interpolator.frequency = sn_rtc_cycles_per_second;
|
||||
sn2_interpolator.addr = RTC_COUNTER_ADDR;
|
||||
register_time_interpolator(&sn2_interpolator);
|
||||
|
||||
ia64_udelay = &ia64_sn_udelay;
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
*
|
||||
*
|
||||
* Copyright (c) 2005 Silicon Graphics, Inc. All Rights Reserved.
|
||||
* Copyright (c) 2005, 2006 Silicon Graphics, Inc. All Rights Reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of version 2 of the GNU General Public License
|
||||
|
@ -22,11 +22,6 @@
|
|||
* License along with this program; if not, write the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
|
||||
*
|
||||
* Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
|
||||
* Mountain View, CA 94043, or:
|
||||
*
|
||||
* http://www.sgi.com
|
||||
*
|
||||
* For further information regarding this notice, see:
|
||||
*
|
||||
* http://oss.sgi.com/projects/GenInfo/NoticeExplan
|
||||
|
|
|
@ -284,12 +284,10 @@ struct sn_irq_info *tiocx_irq_alloc(nasid_t nasid, int widget, int irq,
|
|||
if ((nasid & 1) == 0)
|
||||
return NULL;
|
||||
|
||||
sn_irq_info = kmalloc(sn_irq_size, GFP_KERNEL);
|
||||
sn_irq_info = kzalloc(sn_irq_size, GFP_KERNEL);
|
||||
if (sn_irq_info == NULL)
|
||||
return NULL;
|
||||
|
||||
memset(sn_irq_info, 0x0, sn_irq_size);
|
||||
|
||||
status = tiocx_intr_alloc(nasid, widget, __pa(sn_irq_info), irq,
|
||||
req_nasid, slice);
|
||||
if (status) {
|
||||
|
|
|
@ -738,7 +738,9 @@ xpc_process_disconnect(struct xpc_channel *ch, unsigned long *irq_flags)
|
|||
|
||||
/* make sure all activity has settled down first */
|
||||
|
||||
if (atomic_read(&ch->references) > 0) {
|
||||
if (atomic_read(&ch->references) > 0 ||
|
||||
((ch->flags & XPC_C_CONNECTEDCALLOUT_MADE) &&
|
||||
!(ch->flags & XPC_C_DISCONNECTINGCALLOUT_MADE))) {
|
||||
return;
|
||||
}
|
||||
DBUG_ON(atomic_read(&ch->kthreads_assigned) != 0);
|
||||
|
@ -775,7 +777,7 @@ xpc_process_disconnect(struct xpc_channel *ch, unsigned long *irq_flags)
|
|||
|
||||
/* both sides are disconnected now */
|
||||
|
||||
if (ch->flags & XPC_C_CONNECTCALLOUT) {
|
||||
if (ch->flags & XPC_C_DISCONNECTINGCALLOUT_MADE) {
|
||||
spin_unlock_irqrestore(&ch->lock, *irq_flags);
|
||||
xpc_disconnect_callout(ch, xpcDisconnected);
|
||||
spin_lock_irqsave(&ch->lock, *irq_flags);
|
||||
|
@ -1300,7 +1302,7 @@ xpc_process_msg_IPI(struct xpc_partition *part, int ch_number)
|
|||
"delivered=%d, partid=%d, channel=%d\n",
|
||||
nmsgs_sent, ch->partid, ch->number);
|
||||
|
||||
if (ch->flags & XPC_C_CONNECTCALLOUT) {
|
||||
if (ch->flags & XPC_C_CONNECTEDCALLOUT_MADE) {
|
||||
xpc_activate_kthreads(ch, nmsgs_sent);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -750,12 +750,16 @@ xpc_daemonize_kthread(void *args)
|
|||
/* let registerer know that connection has been established */
|
||||
|
||||
spin_lock_irqsave(&ch->lock, irq_flags);
|
||||
if (!(ch->flags & XPC_C_CONNECTCALLOUT)) {
|
||||
ch->flags |= XPC_C_CONNECTCALLOUT;
|
||||
if (!(ch->flags & XPC_C_CONNECTEDCALLOUT)) {
|
||||
ch->flags |= XPC_C_CONNECTEDCALLOUT;
|
||||
spin_unlock_irqrestore(&ch->lock, irq_flags);
|
||||
|
||||
xpc_connected_callout(ch);
|
||||
|
||||
spin_lock_irqsave(&ch->lock, irq_flags);
|
||||
ch->flags |= XPC_C_CONNECTEDCALLOUT_MADE;
|
||||
spin_unlock_irqrestore(&ch->lock, irq_flags);
|
||||
|
||||
/*
|
||||
* It is possible that while the callout was being
|
||||
* made that the remote partition sent some messages.
|
||||
|
@ -777,15 +781,17 @@ xpc_daemonize_kthread(void *args)
|
|||
|
||||
if (atomic_dec_return(&ch->kthreads_assigned) == 0) {
|
||||
spin_lock_irqsave(&ch->lock, irq_flags);
|
||||
if ((ch->flags & XPC_C_CONNECTCALLOUT) &&
|
||||
!(ch->flags & XPC_C_DISCONNECTCALLOUT)) {
|
||||
ch->flags |= XPC_C_DISCONNECTCALLOUT;
|
||||
if ((ch->flags & XPC_C_CONNECTEDCALLOUT_MADE) &&
|
||||
!(ch->flags & XPC_C_DISCONNECTINGCALLOUT)) {
|
||||
ch->flags |= XPC_C_DISCONNECTINGCALLOUT;
|
||||
spin_unlock_irqrestore(&ch->lock, irq_flags);
|
||||
|
||||
xpc_disconnect_callout(ch, xpcDisconnecting);
|
||||
} else {
|
||||
spin_unlock_irqrestore(&ch->lock, irq_flags);
|
||||
|
||||
spin_lock_irqsave(&ch->lock, irq_flags);
|
||||
ch->flags |= XPC_C_DISCONNECTINGCALLOUT_MADE;
|
||||
}
|
||||
spin_unlock_irqrestore(&ch->lock, irq_flags);
|
||||
if (atomic_dec_return(&part->nchannels_engaged) == 0) {
|
||||
xpc_mark_partition_disengaged(part);
|
||||
xpc_IPI_send_disengage(part);
|
||||
|
|
|
@ -335,10 +335,10 @@ int sn_pci_legacy_read(struct pci_bus *bus, u16 port, u32 *val, u8 size)
|
|||
*/
|
||||
|
||||
SAL_CALL(isrv, SN_SAL_IOIF_PCI_SAFE,
|
||||
pci_domain_nr(bus), bus->number,
|
||||
0, /* io */
|
||||
0, /* read */
|
||||
port, size, __pa(val));
|
||||
pci_domain_nr(bus), bus->number,
|
||||
0, /* io */
|
||||
0, /* read */
|
||||
port, size, __pa(val));
|
||||
|
||||
if (isrv.status == 0)
|
||||
return size;
|
||||
|
@ -381,10 +381,10 @@ int sn_pci_legacy_write(struct pci_bus *bus, u16 port, u32 val, u8 size)
|
|||
*/
|
||||
|
||||
SAL_CALL(isrv, SN_SAL_IOIF_PCI_SAFE,
|
||||
pci_domain_nr(bus), bus->number,
|
||||
0, /* io */
|
||||
1, /* write */
|
||||
port, size, __pa(&val));
|
||||
pci_domain_nr(bus), bus->number,
|
||||
0, /* io */
|
||||
1, /* write */
|
||||
port, size, __pa(&val));
|
||||
|
||||
if (isrv.status == 0)
|
||||
return size;
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (C) 2001-2004 Silicon Graphics, Inc. All rights reserved.
|
||||
* Copyright (C) 2001-2006 Silicon Graphics, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
|
@ -12,7 +12,7 @@
|
|||
#include <asm/sn/pcibus_provider_defs.h>
|
||||
#include <asm/sn/pcidev.h>
|
||||
|
||||
int pcibr_invalidate_ate = 0; /* by default don't invalidate ATE on free */
|
||||
int pcibr_invalidate_ate; /* by default don't invalidate ATE on free */
|
||||
|
||||
/*
|
||||
* mark_ate: Mark the ate as either free or inuse.
|
||||
|
@ -20,14 +20,12 @@ int pcibr_invalidate_ate = 0; /* by default don't invalidate ATE on free */
|
|||
static void mark_ate(struct ate_resource *ate_resource, int start, int number,
|
||||
u64 value)
|
||||
{
|
||||
|
||||
u64 *ate = ate_resource->ate;
|
||||
int index;
|
||||
int length = 0;
|
||||
|
||||
for (index = start; length < number; index++, length++)
|
||||
ate[index] = value;
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -37,7 +35,6 @@ static void mark_ate(struct ate_resource *ate_resource, int start, int number,
|
|||
static int find_free_ate(struct ate_resource *ate_resource, int start,
|
||||
int count)
|
||||
{
|
||||
|
||||
u64 *ate = ate_resource->ate;
|
||||
int index;
|
||||
int start_free;
|
||||
|
@ -70,12 +67,10 @@ static int find_free_ate(struct ate_resource *ate_resource, int start,
|
|||
static inline void free_ate_resource(struct ate_resource *ate_resource,
|
||||
int start)
|
||||
{
|
||||
|
||||
mark_ate(ate_resource, start, ate_resource->ate[start], 0);
|
||||
if ((ate_resource->lowest_free_index > start) ||
|
||||
(ate_resource->lowest_free_index < 0))
|
||||
ate_resource->lowest_free_index = start;
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -84,7 +79,6 @@ static inline void free_ate_resource(struct ate_resource *ate_resource,
|
|||
static inline int alloc_ate_resource(struct ate_resource *ate_resource,
|
||||
int ate_needed)
|
||||
{
|
||||
|
||||
int start_index;
|
||||
|
||||
/*
|
||||
|
@ -118,19 +112,12 @@ static inline int alloc_ate_resource(struct ate_resource *ate_resource,
|
|||
*/
|
||||
int pcibr_ate_alloc(struct pcibus_info *pcibus_info, int count)
|
||||
{
|
||||
int status = 0;
|
||||
u64 flag;
|
||||
int status;
|
||||
unsigned long flags;
|
||||
|
||||
flag = pcibr_lock(pcibus_info);
|
||||
spin_lock_irqsave(&pcibus_info->pbi_lock, flags);
|
||||
status = alloc_ate_resource(&pcibus_info->pbi_int_ate_resource, count);
|
||||
|
||||
if (status < 0) {
|
||||
/* Failed to allocate */
|
||||
pcibr_unlock(pcibus_info, flag);
|
||||
return -1;
|
||||
}
|
||||
|
||||
pcibr_unlock(pcibus_info, flag);
|
||||
spin_unlock_irqrestore(&pcibus_info->pbi_lock, flags);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
@ -182,7 +169,7 @@ void pcibr_ate_free(struct pcibus_info *pcibus_info, int index)
|
|||
ate_write(pcibus_info, index, count, (ate & ~PCI32_ATE_V));
|
||||
}
|
||||
|
||||
flags = pcibr_lock(pcibus_info);
|
||||
spin_lock_irqsave(&pcibus_info->pbi_lock, flags);
|
||||
free_ate_resource(&pcibus_info->pbi_int_ate_resource, index);
|
||||
pcibr_unlock(pcibus_info, flags);
|
||||
spin_unlock_irqrestore(&pcibus_info->pbi_lock, flags);
|
||||
}
|
||||
|
|
|
@ -137,14 +137,12 @@ pcibr_dmatrans_direct64(struct pcidev_info * info, u64 paddr,
|
|||
pci_addr |= PCI64_ATTR_VIRTUAL;
|
||||
|
||||
return pci_addr;
|
||||
|
||||
}
|
||||
|
||||
static dma_addr_t
|
||||
pcibr_dmatrans_direct32(struct pcidev_info * info,
|
||||
u64 paddr, size_t req_size, u64 flags)
|
||||
{
|
||||
|
||||
struct pcidev_info *pcidev_info = info->pdi_host_pcidev_info;
|
||||
struct pcibus_info *pcibus_info = (struct pcibus_info *)pcidev_info->
|
||||
pdi_pcibus_info;
|
||||
|
@ -171,7 +169,6 @@ pcibr_dmatrans_direct32(struct pcidev_info * info,
|
|||
}
|
||||
|
||||
return PCI32_DIRECT_BASE | offset;
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -218,9 +215,8 @@ void sn_dma_flush(u64 addr)
|
|||
u64 flags;
|
||||
u64 itte;
|
||||
struct hubdev_info *hubinfo;
|
||||
volatile struct sn_flush_device_kernel *p;
|
||||
volatile struct sn_flush_device_common *common;
|
||||
|
||||
struct sn_flush_device_kernel *p;
|
||||
struct sn_flush_device_common *common;
|
||||
struct sn_flush_nasid_entry *flush_nasid_list;
|
||||
|
||||
if (!sn_ioif_inited)
|
||||
|
@ -310,8 +306,7 @@ void sn_dma_flush(u64 addr)
|
|||
(common->sfdl_slot - 1));
|
||||
}
|
||||
} else {
|
||||
spin_lock_irqsave((spinlock_t *)&p->sfdl_flush_lock,
|
||||
flags);
|
||||
spin_lock_irqsave(&p->sfdl_flush_lock, flags);
|
||||
*common->sfdl_flush_addr = 0;
|
||||
|
||||
/* force an interrupt. */
|
||||
|
@ -322,8 +317,7 @@ void sn_dma_flush(u64 addr)
|
|||
cpu_relax();
|
||||
|
||||
/* okay, everything is synched up. */
|
||||
spin_unlock_irqrestore((spinlock_t *)&p->sfdl_flush_lock,
|
||||
flags);
|
||||
spin_unlock_irqrestore(&p->sfdl_flush_lock, flags);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -163,9 +163,12 @@ pcibr_bus_fixup(struct pcibus_bussoft *prom_bussoft, struct pci_controller *cont
|
|||
/* Setup the PMU ATE map */
|
||||
soft->pbi_int_ate_resource.lowest_free_index = 0;
|
||||
soft->pbi_int_ate_resource.ate =
|
||||
kmalloc(soft->pbi_int_ate_size * sizeof(u64), GFP_KERNEL);
|
||||
memset(soft->pbi_int_ate_resource.ate, 0,
|
||||
(soft->pbi_int_ate_size * sizeof(u64)));
|
||||
kzalloc(soft->pbi_int_ate_size * sizeof(u64), GFP_KERNEL);
|
||||
|
||||
if (!soft->pbi_int_ate_resource.ate) {
|
||||
kfree(soft);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (prom_bussoft->bs_asic_type == PCIIO_ASIC_TYPE_TIOCP) {
|
||||
/* TIO PCI Bridge: find nearest node with CPUs */
|
||||
|
|
|
@ -12,14 +12,14 @@ CFLAGS_MODULE += -mmodel=large
|
|||
|
||||
ifdef CONFIG_CHIP_VDEC2
|
||||
cflags-$(CONFIG_ISA_M32R2) += -DNO_FPU -Wa,-bitinst
|
||||
aflags-$(CONFIG_ISA_M32R2) += -DNO_FPU -Wa,-bitinst
|
||||
aflags-$(CONFIG_ISA_M32R2) += -DNO_FPU -O2 -Wa,-bitinst -Wa,-no-parallel
|
||||
else
|
||||
cflags-$(CONFIG_ISA_M32R2) += -DNO_FPU -m32r2
|
||||
aflags-$(CONFIG_ISA_M32R2) += -DNO_FPU -m32r2
|
||||
aflags-$(CONFIG_ISA_M32R2) += -DNO_FPU -m32r2 -O2
|
||||
endif
|
||||
|
||||
cflags-$(CONFIG_ISA_M32R) += -DNO_FPU
|
||||
aflags-$(CONFIG_ISA_M32R) += -DNO_FPU -Wa,-no-bitinst
|
||||
aflags-$(CONFIG_ISA_M32R) += -DNO_FPU -O2 -Wa,-no-bitinst
|
||||
|
||||
CFLAGS += $(cflags-y)
|
||||
AFLAGS += $(aflags-y)
|
||||
|
|
|
@ -36,7 +36,7 @@ int do_signal(struct pt_regs *, sigset_t *);
|
|||
asmlinkage int
|
||||
sys_rt_sigsuspend(sigset_t *unewset, size_t sigsetsize,
|
||||
unsigned long r2, unsigned long r3, unsigned long r4,
|
||||
unsigned long r5, unsigned long r6, struct pt_regs regs)
|
||||
unsigned long r5, unsigned long r6, struct pt_regs *regs)
|
||||
{
|
||||
sigset_t saveset, newset;
|
||||
|
||||
|
@ -54,21 +54,21 @@ sys_rt_sigsuspend(sigset_t *unewset, size_t sigsetsize,
|
|||
recalc_sigpending();
|
||||
spin_unlock_irq(¤t->sighand->siglock);
|
||||
|
||||
regs.r0 = -EINTR;
|
||||
regs->r0 = -EINTR;
|
||||
while (1) {
|
||||
current->state = TASK_INTERRUPTIBLE;
|
||||
schedule();
|
||||
if (do_signal(®s, &saveset))
|
||||
return regs.r0;
|
||||
if (do_signal(regs, &saveset))
|
||||
return regs->r0;
|
||||
}
|
||||
}
|
||||
|
||||
asmlinkage int
|
||||
sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss,
|
||||
unsigned long r2, unsigned long r3, unsigned long r4,
|
||||
unsigned long r5, unsigned long r6, struct pt_regs regs)
|
||||
unsigned long r5, unsigned long r6, struct pt_regs *regs)
|
||||
{
|
||||
return do_sigaltstack(uss, uoss, regs.spu);
|
||||
return do_sigaltstack(uss, uoss, regs->spu);
|
||||
}
|
||||
|
||||
|
||||
|
@ -140,11 +140,10 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc,
|
|||
asmlinkage int
|
||||
sys_rt_sigreturn(unsigned long r0, unsigned long r1,
|
||||
unsigned long r2, unsigned long r3, unsigned long r4,
|
||||
unsigned long r5, unsigned long r6, struct pt_regs regs)
|
||||
unsigned long r5, unsigned long r6, struct pt_regs *regs)
|
||||
{
|
||||
struct rt_sigframe __user *frame = (struct rt_sigframe __user *)regs.spu;
|
||||
struct rt_sigframe __user *frame = (struct rt_sigframe __user *)regs->spu;
|
||||
sigset_t set;
|
||||
stack_t st;
|
||||
int result;
|
||||
|
||||
if (!access_ok(VERIFY_READ, frame, sizeof(*frame)))
|
||||
|
@ -158,14 +157,11 @@ sys_rt_sigreturn(unsigned long r0, unsigned long r1,
|
|||
recalc_sigpending();
|
||||
spin_unlock_irq(¤t->sighand->siglock);
|
||||
|
||||
if (restore_sigcontext(®s, &frame->uc.uc_mcontext, &result))
|
||||
if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &result))
|
||||
goto badframe;
|
||||
|
||||
if (__copy_from_user(&st, &frame->uc.uc_stack, sizeof(st)))
|
||||
if (do_sigaltstack(&frame->uc.uc_stack, NULL, regs->spu) == -EFAULT)
|
||||
goto badframe;
|
||||
/* It is more difficult to avoid calling this function than to
|
||||
call it and ignore errors. */
|
||||
do_sigaltstack(&st, NULL, regs.spu);
|
||||
|
||||
return result;
|
||||
|
||||
|
|
|
@ -29,28 +29,7 @@
|
|||
|
||||
/*
|
||||
* sys_tas() - test-and-set
|
||||
* linuxthreads testing version
|
||||
*/
|
||||
#ifndef CONFIG_SMP
|
||||
asmlinkage int sys_tas(int *addr)
|
||||
{
|
||||
int oldval;
|
||||
unsigned long flags;
|
||||
|
||||
if (!access_ok(VERIFY_WRITE, addr, sizeof (int)))
|
||||
return -EFAULT;
|
||||
local_irq_save(flags);
|
||||
oldval = *addr;
|
||||
if (!oldval)
|
||||
*addr = 1;
|
||||
local_irq_restore(flags);
|
||||
return oldval;
|
||||
}
|
||||
#else /* CONFIG_SMP */
|
||||
#include <linux/spinlock.h>
|
||||
|
||||
static DEFINE_SPINLOCK(tas_lock);
|
||||
|
||||
asmlinkage int sys_tas(int *addr)
|
||||
{
|
||||
int oldval;
|
||||
|
@ -58,15 +37,43 @@ asmlinkage int sys_tas(int *addr)
|
|||
if (!access_ok(VERIFY_WRITE, addr, sizeof (int)))
|
||||
return -EFAULT;
|
||||
|
||||
_raw_spin_lock(&tas_lock);
|
||||
oldval = *addr;
|
||||
if (!oldval)
|
||||
*addr = 1;
|
||||
_raw_spin_unlock(&tas_lock);
|
||||
/* atomic operation:
|
||||
* oldval = *addr; *addr = 1;
|
||||
*/
|
||||
__asm__ __volatile__ (
|
||||
DCACHE_CLEAR("%0", "r4", "%1")
|
||||
" .fillinsn\n"
|
||||
"1:\n"
|
||||
" lock %0, @%1 -> unlock %2, @%1\n"
|
||||
"2:\n"
|
||||
/* NOTE:
|
||||
* The m32r processor can accept interrupts only
|
||||
* at the 32-bit instruction boundary.
|
||||
* So, in the above code, the "unlock" instruction
|
||||
* can be executed continuously after the "lock"
|
||||
* instruction execution without any interruptions.
|
||||
*/
|
||||
".section .fixup,\"ax\"\n"
|
||||
" .balign 4\n"
|
||||
"3: ldi %0, #%3\n"
|
||||
" seth r14, #high(2b)\n"
|
||||
" or3 r14, r14, #low(2b)\n"
|
||||
" jmp r14\n"
|
||||
".previous\n"
|
||||
".section __ex_table,\"a\"\n"
|
||||
" .balign 4\n"
|
||||
" .long 1b,3b\n"
|
||||
".previous\n"
|
||||
: "=&r" (oldval)
|
||||
: "r" (addr), "r" (1), "i"(-EFAULT)
|
||||
: "r14", "memory"
|
||||
#ifdef CONFIG_CHIP_M32700_TS1
|
||||
, "r4"
|
||||
#endif /* CONFIG_CHIP_M32700_TS1 */
|
||||
);
|
||||
|
||||
return oldval;
|
||||
}
|
||||
#endif /* CONFIG_SMP */
|
||||
|
||||
/*
|
||||
* sys_pipe() is the normal C calling standard for creating
|
||||
|
|
|
@ -64,7 +64,7 @@ do { \
|
|||
" .balign 4\n" \
|
||||
" .long 0b,3b\n" \
|
||||
".previous" \
|
||||
: "=r"(res), "=r"(count), "=&r" (__d0), "=&r" (__d1), \
|
||||
: "=&r"(res), "=&r"(count), "=&r" (__d0), "=&r" (__d1), \
|
||||
"=&r" (__d2) \
|
||||
: "i"(-EFAULT), "0"(count), "1"(count), "3"(src), \
|
||||
"4"(dst) \
|
||||
|
@ -101,7 +101,7 @@ do { \
|
|||
" .balign 4\n" \
|
||||
" .long 0b,3b\n" \
|
||||
".previous" \
|
||||
: "=r"(res), "=r"(count), "=&r" (__d0), "=&r" (__d1), \
|
||||
: "=&r"(res), "=&r"(count), "=&r" (__d0), "=&r" (__d1), \
|
||||
"=&r" (__d2) \
|
||||
: "i"(-EFAULT), "0"(count), "1"(count), "3"(src), \
|
||||
"4"(dst) \
|
||||
|
|
|
@ -129,6 +129,9 @@ void machine_power_off(void)
|
|||
for (;;);
|
||||
}
|
||||
|
||||
void (*pm_power_off)(void) = machine_power_off;
|
||||
EXPORT_SYMBOL(pm_power_off);
|
||||
|
||||
void show_regs(struct pt_regs * regs)
|
||||
{
|
||||
printk("\n");
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.15-rc2
|
||||
# Thu Nov 24 01:06:21 2005
|
||||
# Linux kernel version: 2.6.16-rc4
|
||||
# Tue Feb 21 13:44:31 2006
|
||||
#
|
||||
CONFIG_MIPS=y
|
||||
|
||||
|
@ -144,7 +144,6 @@ CONFIG_PREEMPT_BKL=y
|
|||
# Code maturity level options
|
||||
#
|
||||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_CLEAN_COMPILE=y
|
||||
CONFIG_LOCK_KERNEL=y
|
||||
CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||
|
||||
|
@ -250,6 +249,7 @@ CONFIG_NET=y
|
|||
#
|
||||
# Networking options
|
||||
#
|
||||
# CONFIG_NETDEBUG is not set
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_PACKET_MMAP=y
|
||||
CONFIG_UNIX=y
|
||||
|
@ -289,6 +289,7 @@ CONFIG_TCP_CONG_BIC=y
|
|||
# SCTP Configuration (EXPERIMENTAL)
|
||||
#
|
||||
# CONFIG_IP_SCTP is not set
|
||||
|
||||
# CONFIG_ATM is not set
|
||||
# CONFIG_BRIDGE is not set
|
||||
# CONFIG_VLAN_8021Q is not set
|
||||
|
@ -448,7 +449,7 @@ CONFIG_SCSI_SAS_ATTRS=m
|
|||
#
|
||||
# SCSI low-level drivers
|
||||
#
|
||||
CONFIG_ISCSI_TCP=m
|
||||
# CONFIG_ISCSI_TCP is not set
|
||||
# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
|
||||
# CONFIG_SCSI_3W_9XXX is not set
|
||||
# CONFIG_SCSI_ACARD is not set
|
||||
|
@ -773,6 +774,10 @@ CONFIG_USB_ARCH_HAS_OHCI=y
|
|||
# SN Devices
|
||||
#
|
||||
|
||||
#
|
||||
# EDAC - error detection and reporting (RAS)
|
||||
#
|
||||
|
||||
#
|
||||
# File systems
|
||||
#
|
||||
|
|
|
@ -103,8 +103,9 @@ jiffies_to_compat_timeval(unsigned long jiffies, struct compat_timeval *value)
|
|||
* one divide.
|
||||
*/
|
||||
u64 nsec = (u64)jiffies * TICK_NSEC;
|
||||
value->tv_sec = div_long_long_rem(nsec, NSEC_PER_SEC, &value->tv_usec);
|
||||
value->tv_usec /= NSEC_PER_USEC;
|
||||
long rem;
|
||||
value->tv_sec = div_long_long_rem(nsec, NSEC_PER_SEC, &rem);
|
||||
value->tv_usec = rem / NSEC_PER_USEC;
|
||||
}
|
||||
|
||||
#define ELF_CORE_EFLAGS EF_MIPS_ABI2
|
||||
|
|
|
@ -105,8 +105,9 @@ jiffies_to_compat_timeval(unsigned long jiffies, struct compat_timeval *value)
|
|||
* one divide.
|
||||
*/
|
||||
u64 nsec = (u64)jiffies * TICK_NSEC;
|
||||
value->tv_sec = div_long_long_rem(nsec, NSEC_PER_SEC, &value->tv_usec);
|
||||
value->tv_usec /= NSEC_PER_USEC;
|
||||
long rem;
|
||||
value->tv_sec = div_long_long_rem(nsec, NSEC_PER_SEC, &rem);
|
||||
value->tv_usec = rem / NSEC_PER_USEC;
|
||||
}
|
||||
|
||||
#undef ELF_CORE_COPY_REGS
|
||||
|
|
|
@ -161,60 +161,6 @@ out:
|
|||
return error;
|
||||
}
|
||||
|
||||
struct dirent32 {
|
||||
unsigned int d_ino;
|
||||
unsigned int d_off;
|
||||
unsigned short d_reclen;
|
||||
char d_name[NAME_MAX + 1];
|
||||
};
|
||||
|
||||
static void
|
||||
xlate_dirent(void *dirent64, void *dirent32, long n)
|
||||
{
|
||||
long off;
|
||||
struct dirent *dirp;
|
||||
struct dirent32 *dirp32;
|
||||
|
||||
off = 0;
|
||||
while (off < n) {
|
||||
dirp = (struct dirent *)(dirent64 + off);
|
||||
dirp32 = (struct dirent32 *)(dirent32 + off);
|
||||
off += dirp->d_reclen;
|
||||
dirp32->d_ino = dirp->d_ino;
|
||||
dirp32->d_off = (unsigned int)dirp->d_off;
|
||||
dirp32->d_reclen = dirp->d_reclen;
|
||||
strncpy(dirp32->d_name, dirp->d_name, dirp->d_reclen - ((3 * 4) + 2));
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
asmlinkage long
|
||||
sys32_getdents(unsigned int fd, void * dirent32, unsigned int count)
|
||||
{
|
||||
long n;
|
||||
void *dirent64;
|
||||
|
||||
dirent64 = (void *)((unsigned long)(dirent32 + (sizeof(long) - 1)) & ~(sizeof(long) - 1));
|
||||
if ((n = sys_getdents(fd, dirent64, count - (dirent64 - dirent32))) < 0)
|
||||
return(n);
|
||||
xlate_dirent(dirent64, dirent32, n);
|
||||
return(n);
|
||||
}
|
||||
|
||||
asmlinkage int old_readdir(unsigned int fd, void * dirent, unsigned int count);
|
||||
|
||||
asmlinkage int
|
||||
sys32_readdir(unsigned int fd, void * dirent32, unsigned int count)
|
||||
{
|
||||
int n;
|
||||
struct dirent dirent64;
|
||||
|
||||
if ((n = old_readdir(fd, &dirent64, count)) < 0)
|
||||
return(n);
|
||||
xlate_dirent(&dirent64, dirent32, dirent64.d_reclen);
|
||||
return(n);
|
||||
}
|
||||
|
||||
asmlinkage int
|
||||
sys32_waitpid(compat_pid_t pid, unsigned int *stat_addr, int options)
|
||||
{
|
||||
|
@ -230,6 +176,9 @@ sysn32_waitid(int which, compat_pid_t pid,
|
|||
long ret;
|
||||
mm_segment_t old_fs = get_fs();
|
||||
|
||||
if (!access_ok(VERIFY_WRITE, uinfo, sizeof(*uinfo)))
|
||||
return -EFAULT;
|
||||
|
||||
set_fs (KERNEL_DS);
|
||||
ret = sys_waitid(which, pid, uinfo, options,
|
||||
uru ? (struct rusage __user *) &ru : NULL);
|
||||
|
@ -1450,25 +1399,6 @@ sys32_timer_create(u32 clock, struct sigevent32 __user *se32, timer_t __user *ti
|
|||
return sys_timer_create(clock, p, timer_id);
|
||||
}
|
||||
|
||||
asmlinkage long
|
||||
sysn32_rt_sigtimedwait(const sigset_t __user *uthese,
|
||||
siginfo_t __user *uinfo,
|
||||
const struct compat_timespec __user *uts32,
|
||||
size_t sigsetsize)
|
||||
{
|
||||
struct timespec __user *uts = NULL;
|
||||
|
||||
if (uts32) {
|
||||
struct timespec ts;
|
||||
uts = compat_alloc_user_space(sizeof(struct timespec));
|
||||
if (get_user(ts.tv_sec, &uts32->tv_sec) ||
|
||||
get_user(ts.tv_nsec, &uts32->tv_nsec) ||
|
||||
copy_to_user (uts, &ts, sizeof (ts)))
|
||||
return -EFAULT;
|
||||
}
|
||||
return sys_rt_sigtimedwait(uthese, uinfo, uts, sigsetsize);
|
||||
}
|
||||
|
||||
save_static_function(sys32_clone);
|
||||
__attribute_used__ noinline static int
|
||||
_sys32_clone(nabi_no_regargs struct pt_regs regs)
|
||||
|
|
|
@ -626,7 +626,7 @@ einval: li v0, -EINVAL
|
|||
sys sys_fstatat64 4
|
||||
sys sys_unlinkat 3
|
||||
sys sys_renameat 4 /* 4295 */
|
||||
sys sys_linkat 4
|
||||
sys sys_linkat 5
|
||||
sys sys_symlinkat 3
|
||||
sys sys_readlinkat 4
|
||||
sys sys_fchmodat 3
|
||||
|
|
|
@ -195,7 +195,7 @@ EXPORT(sysn32_call_table)
|
|||
PTR sys_fdatasync
|
||||
PTR sys_truncate
|
||||
PTR sys_ftruncate /* 6075 */
|
||||
PTR sys32_getdents
|
||||
PTR compat_sys_getdents
|
||||
PTR sys_getcwd
|
||||
PTR sys_chdir
|
||||
PTR sys_fchdir
|
||||
|
@ -245,9 +245,9 @@ EXPORT(sysn32_call_table)
|
|||
PTR sys_capget
|
||||
PTR sys_capset
|
||||
PTR sys32_rt_sigpending /* 6125 */
|
||||
PTR sysn32_rt_sigtimedwait
|
||||
PTR compat_sys_rt_sigtimedwait
|
||||
PTR sys_rt_sigqueueinfo
|
||||
PTR sys32_rt_sigsuspend
|
||||
PTR sysn32_rt_sigsuspend
|
||||
PTR sys32_sigaltstack
|
||||
PTR compat_sys_utime /* 6130 */
|
||||
PTR sys_mknod
|
||||
|
|
|
@ -293,7 +293,7 @@ sys_call_table:
|
|||
PTR sys_uselib
|
||||
PTR sys_swapon
|
||||
PTR sys_reboot
|
||||
PTR sys32_readdir
|
||||
PTR compat_sys_old_readdir
|
||||
PTR old_mmap /* 4090 */
|
||||
PTR sys_munmap
|
||||
PTR sys_truncate
|
||||
|
@ -345,7 +345,7 @@ sys_call_table:
|
|||
PTR sys_setfsuid
|
||||
PTR sys_setfsgid
|
||||
PTR sys32_llseek /* 4140 */
|
||||
PTR sys32_getdents
|
||||
PTR compat_sys_getdents
|
||||
PTR compat_sys_select
|
||||
PTR sys_flock
|
||||
PTR sys_msync
|
||||
|
|
|
@ -540,6 +540,9 @@ void __init setup_arch(char **cmdline_p)
|
|||
sparse_init();
|
||||
paging_init();
|
||||
resource_init();
|
||||
#ifdef CONFIG_SMP
|
||||
plat_smp_setup();
|
||||
#endif
|
||||
}
|
||||
|
||||
int __init fpu_disable(char *s)
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
* for more details.
|
||||
*
|
||||
* Copyright (C) 1991, 1992 Linus Torvalds
|
||||
* Copyright (C) 1994 - 2000 Ralf Baechle
|
||||
* Copyright (C) 1994 - 2000, 2006 Ralf Baechle
|
||||
* Copyright (C) 1999, 2000 Silicon Graphics, Inc.
|
||||
*/
|
||||
#include <linux/cache.h>
|
||||
|
@ -106,8 +106,6 @@ typedef struct compat_siginfo {
|
|||
|
||||
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
|
||||
|
||||
extern int do_signal32(sigset_t *oldset, struct pt_regs *regs);
|
||||
|
||||
/* 32-bit compatibility types */
|
||||
|
||||
#define _NSIG_BPW32 32
|
||||
|
@ -198,7 +196,7 @@ __attribute_used__ noinline static int
|
|||
_sys32_sigsuspend(nabi_no_regargs struct pt_regs regs)
|
||||
{
|
||||
compat_sigset_t *uset;
|
||||
sigset_t newset, saveset;
|
||||
sigset_t newset;
|
||||
|
||||
uset = (compat_sigset_t *) regs.regs[4];
|
||||
if (get_sigset(&newset, uset))
|
||||
|
@ -206,19 +204,15 @@ _sys32_sigsuspend(nabi_no_regargs struct pt_regs regs)
|
|||
sigdelsetmask(&newset, ~_BLOCKABLE);
|
||||
|
||||
spin_lock_irq(¤t->sighand->siglock);
|
||||
saveset = current->blocked;
|
||||
current->saved_sigmask = current->blocked;
|
||||
current->blocked = newset;
|
||||
recalc_sigpending();
|
||||
spin_unlock_irq(¤t->sighand->siglock);
|
||||
|
||||
regs.regs[2] = EINTR;
|
||||
regs.regs[7] = 1;
|
||||
while (1) {
|
||||
current->state = TASK_INTERRUPTIBLE;
|
||||
schedule();
|
||||
if (do_signal32(&saveset, ®s))
|
||||
return -EINTR;
|
||||
}
|
||||
current->state = TASK_INTERRUPTIBLE;
|
||||
schedule();
|
||||
set_thread_flag(TIF_RESTORE_SIGMASK);
|
||||
return -ERESTARTNOHAND;
|
||||
}
|
||||
|
||||
save_static_function(sys32_rt_sigsuspend);
|
||||
|
@ -226,8 +220,8 @@ __attribute_used__ noinline static int
|
|||
_sys32_rt_sigsuspend(nabi_no_regargs struct pt_regs regs)
|
||||
{
|
||||
compat_sigset_t *uset;
|
||||
sigset_t newset, saveset;
|
||||
size_t sigsetsize;
|
||||
sigset_t newset;
|
||||
size_t sigsetsize;
|
||||
|
||||
/* XXX Don't preclude handling different sized sigset_t's. */
|
||||
sigsetsize = regs.regs[5];
|
||||
|
@ -240,19 +234,15 @@ _sys32_rt_sigsuspend(nabi_no_regargs struct pt_regs regs)
|
|||
sigdelsetmask(&newset, ~_BLOCKABLE);
|
||||
|
||||
spin_lock_irq(¤t->sighand->siglock);
|
||||
saveset = current->blocked;
|
||||
current->saved_sigmask = current->blocked;
|
||||
current->blocked = newset;
|
||||
recalc_sigpending();
|
||||
spin_unlock_irq(¤t->sighand->siglock);
|
||||
|
||||
regs.regs[2] = EINTR;
|
||||
regs.regs[7] = 1;
|
||||
while (1) {
|
||||
current->state = TASK_INTERRUPTIBLE;
|
||||
schedule();
|
||||
if (do_signal32(&saveset, ®s))
|
||||
return -EINTR;
|
||||
}
|
||||
current->state = TASK_INTERRUPTIBLE;
|
||||
schedule();
|
||||
set_thread_flag(TIF_RESTORE_SIGMASK);
|
||||
return -ERESTARTNOHAND;
|
||||
}
|
||||
|
||||
asmlinkage int sys32_sigaction(int sig, const struct sigaction32 *act,
|
||||
|
@ -783,7 +773,7 @@ static inline int handle_signal(unsigned long sig, siginfo_t *info,
|
|||
regs->regs[2] = EINTR;
|
||||
break;
|
||||
case ERESTARTSYS:
|
||||
if(!(ka->sa.sa_flags & SA_RESTART)) {
|
||||
if (!(ka->sa.sa_flags & SA_RESTART)) {
|
||||
regs->regs[2] = EINTR;
|
||||
break;
|
||||
}
|
||||
|
@ -810,9 +800,10 @@ static inline int handle_signal(unsigned long sig, siginfo_t *info,
|
|||
return ret;
|
||||
}
|
||||
|
||||
int do_signal32(sigset_t *oldset, struct pt_regs *regs)
|
||||
void do_signal32(struct pt_regs *regs)
|
||||
{
|
||||
struct k_sigaction ka;
|
||||
sigset_t *oldset;
|
||||
siginfo_t info;
|
||||
int signr;
|
||||
|
||||
|
@ -822,17 +813,30 @@ int do_signal32(sigset_t *oldset, struct pt_regs *regs)
|
|||
* if so.
|
||||
*/
|
||||
if (!user_mode(regs))
|
||||
return 1;
|
||||
return;
|
||||
|
||||
if (try_to_freeze())
|
||||
goto no_signal;
|
||||
|
||||
if (!oldset)
|
||||
if (test_thread_flag(TIF_RESTORE_SIGMASK))
|
||||
oldset = ¤t->saved_sigmask;
|
||||
else
|
||||
oldset = ¤t->blocked;
|
||||
|
||||
signr = get_signal_to_deliver(&info, &ka, regs, NULL);
|
||||
if (signr > 0)
|
||||
return handle_signal(signr, &info, &ka, oldset, regs);
|
||||
if (signr > 0) {
|
||||
/* Whee! Actually deliver the signal. */
|
||||
if (handle_signal(signr, &info, &ka, oldset, regs) == 0) {
|
||||
/*
|
||||
* A signal was successfully delivered; the saved
|
||||
* sigmask will have been stored in the signal frame,
|
||||
* and will be restored by sigreturn, so we can simply
|
||||
* clear the TIF_RESTORE_SIGMASK flag.
|
||||
*/
|
||||
if (test_thread_flag(TIF_RESTORE_SIGMASK))
|
||||
clear_thread_flag(TIF_RESTORE_SIGMASK);
|
||||
}
|
||||
}
|
||||
|
||||
no_signal:
|
||||
/*
|
||||
|
@ -853,7 +857,15 @@ no_signal:
|
|||
regs->cp0_epc -= 4;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* If there's no signal to deliver, we just put the saved sigmask
|
||||
* back
|
||||
*/
|
||||
if (test_thread_flag(TIF_RESTORE_SIGMASK)) {
|
||||
clear_thread_flag(TIF_RESTORE_SIGMASK);
|
||||
sigprocmask(SIG_SETMASK, ¤t->saved_sigmask, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
asmlinkage int sys32_rt_sigaction(int sig, const struct sigaction32 *act,
|
||||
|
|
|
@ -81,6 +81,39 @@ struct rt_sigframe_n32 {
|
|||
#endif
|
||||
};
|
||||
|
||||
extern void sigset_from_compat (sigset_t *set, compat_sigset_t *compat);
|
||||
|
||||
save_static_function(sysn32_rt_sigsuspend);
|
||||
__attribute_used__ noinline static int
|
||||
_sysn32_rt_sigsuspend(nabi_no_regargs struct pt_regs regs)
|
||||
{
|
||||
compat_sigset_t __user *unewset, uset;
|
||||
size_t sigsetsize;
|
||||
sigset_t newset;
|
||||
|
||||
/* XXX Don't preclude handling different sized sigset_t's. */
|
||||
sigsetsize = regs.regs[5];
|
||||
if (sigsetsize != sizeof(sigset_t))
|
||||
return -EINVAL;
|
||||
|
||||
unewset = (compat_sigset_t __user *) regs.regs[4];
|
||||
if (copy_from_user(&uset, unewset, sizeof(uset)))
|
||||
return -EFAULT;
|
||||
sigset_from_compat (&newset, &uset);
|
||||
sigdelsetmask(&newset, ~_BLOCKABLE);
|
||||
|
||||
spin_lock_irq(¤t->sighand->siglock);
|
||||
current->saved_sigmask = current->blocked;
|
||||
current->blocked = newset;
|
||||
recalc_sigpending();
|
||||
spin_unlock_irq(¤t->sighand->siglock);
|
||||
|
||||
current->state = TASK_INTERRUPTIBLE;
|
||||
schedule();
|
||||
set_thread_flag(TIF_RESTORE_SIGMASK);
|
||||
return -ERESTARTNOHAND;
|
||||
}
|
||||
|
||||
save_static_function(sysn32_rt_sigreturn);
|
||||
__attribute_used__ noinline static void
|
||||
_sysn32_rt_sigreturn(nabi_no_regargs struct pt_regs regs)
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
#include <linux/timex.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/cpumask.h>
|
||||
#include <linux/cpu.h>
|
||||
|
||||
#include <asm/atomic.h>
|
||||
#include <asm/cpu.h>
|
||||
|
@ -235,7 +236,7 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
|
|||
init_new_context(current, &init_mm);
|
||||
current_thread_info()->cpu = 0;
|
||||
smp_tune_scheduling();
|
||||
prom_prepare_cpus(max_cpus);
|
||||
plat_prepare_cpus(max_cpus);
|
||||
}
|
||||
|
||||
/* preload SMP state for boot cpu */
|
||||
|
@ -424,6 +425,25 @@ void flush_tlb_one(unsigned long vaddr)
|
|||
local_flush_tlb_one(vaddr);
|
||||
}
|
||||
|
||||
static DEFINE_PER_CPU(struct cpu, cpu_devices);
|
||||
|
||||
static int __init topology_init(void)
|
||||
{
|
||||
int cpu;
|
||||
int ret;
|
||||
|
||||
for_each_cpu(cpu) {
|
||||
ret = register_cpu(&per_cpu(cpu_devices, cpu), cpu, NULL);
|
||||
if (ret)
|
||||
printk(KERN_WARNING "topology_init: register_cpu %d "
|
||||
"failed (%d)\n", cpu, ret);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
subsys_initcall(topology_init);
|
||||
|
||||
EXPORT_SYMBOL(flush_tlb_page);
|
||||
EXPORT_SYMBOL(flush_tlb_one);
|
||||
EXPORT_SYMBOL(cpu_data);
|
||||
|
|
|
@ -143,7 +143,7 @@ static struct irqaction irq_call = {
|
|||
* Make sure all CPU's are in a sensible state before we boot any of the
|
||||
* secondarys
|
||||
*/
|
||||
void prom_prepare_cpus(unsigned int max_cpus)
|
||||
void plat_smp_setup(void)
|
||||
{
|
||||
unsigned long val;
|
||||
int i, num;
|
||||
|
@ -179,11 +179,9 @@ void prom_prepare_cpus(unsigned int max_cpus)
|
|||
write_vpe_c0_vpeconf0(tmp);
|
||||
|
||||
/* Record this as available CPU */
|
||||
if (i < max_cpus) {
|
||||
cpu_set(i, phys_cpu_present_map);
|
||||
__cpu_number_map[i] = ++num;
|
||||
__cpu_logical_map[num] = i;
|
||||
}
|
||||
cpu_set(i, phys_cpu_present_map);
|
||||
__cpu_number_map[i] = ++num;
|
||||
__cpu_logical_map[num] = i;
|
||||
}
|
||||
|
||||
/* disable multi-threading with TC's */
|
||||
|
@ -241,7 +239,10 @@ void prom_prepare_cpus(unsigned int max_cpus)
|
|||
set_vi_handler (MIPS_CPU_IPI_RESCHED_IRQ, ipi_resched_dispatch);
|
||||
set_vi_handler (MIPS_CPU_IPI_CALL_IRQ, ipi_call_dispatch);
|
||||
}
|
||||
}
|
||||
|
||||
void __init plat_prepare_cpus(unsigned int max_cpus)
|
||||
{
|
||||
cpu_ipi_resched_irq = MIPSCPU_INT_BASE + MIPS_CPU_IPI_RESCHED_IRQ;
|
||||
cpu_ipi_call_irq = MIPSCPU_INT_BASE + MIPS_CPU_IPI_CALL_IRQ;
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (C) 1994 - 1999, 2000, 01 Ralf Baechle
|
||||
* Copyright (C) 1994 - 1999, 2000, 01, 06 Ralf Baechle
|
||||
* Copyright (C) 1995, 1996 Paul M. Antoine
|
||||
* Copyright (C) 1998 Ulf Carlsson
|
||||
* Copyright (C) 1999 Silicon Graphics, Inc.
|
||||
|
@ -548,6 +548,8 @@ asmlinkage void do_ov(struct pt_regs *regs)
|
|||
{
|
||||
siginfo_t info;
|
||||
|
||||
die_if_kernel("Integer overflow", regs);
|
||||
|
||||
info.si_code = FPE_INTOVF;
|
||||
info.si_signo = SIGFPE;
|
||||
info.si_errno = 0;
|
||||
|
|
|
@ -64,7 +64,7 @@ LEAF(except_vec2_sb1)
|
|||
sd k0,0x170($0)
|
||||
sd k1,0x178($0)
|
||||
|
||||
#if CONFIG_SB1_CEX_ALWAYS_FATAL
|
||||
#ifdef CONFIG_SB1_CEX_ALWAYS_FATAL
|
||||
j handle_vec2_sb1
|
||||
nop
|
||||
#else
|
||||
|
|
|
@ -50,37 +50,25 @@ void __init prom_grab_secondary(void)
|
|||
* We don't want to start the secondary CPU yet nor do we have a nice probing
|
||||
* feature in PMON so we just assume presence of the secondary core.
|
||||
*/
|
||||
static char maxcpus_string[] __initdata =
|
||||
KERN_WARNING "max_cpus set to 0; using 1 instead\n";
|
||||
|
||||
void __init prom_prepare_cpus(unsigned int max_cpus)
|
||||
void __init plat_smp_setup(void)
|
||||
{
|
||||
int enabled = 0, i;
|
||||
|
||||
if (max_cpus == 0) {
|
||||
printk(maxcpus_string);
|
||||
max_cpus = 1;
|
||||
}
|
||||
int i;
|
||||
|
||||
cpus_clear(phys_cpu_present_map);
|
||||
|
||||
for (i = 0; i < 2; i++) {
|
||||
if (i == max_cpus)
|
||||
break;
|
||||
|
||||
/*
|
||||
* The boot CPU
|
||||
*/
|
||||
cpu_set(i, phys_cpu_present_map);
|
||||
__cpu_number_map[i] = i;
|
||||
__cpu_logical_map[i] = i;
|
||||
enabled++;
|
||||
}
|
||||
}
|
||||
|
||||
void __init plat_prepare_cpus(unsigned int max_cpus)
|
||||
{
|
||||
/*
|
||||
* Be paranoid. Enable the IPI only if we're really about to go SMP.
|
||||
*/
|
||||
if (enabled > 1)
|
||||
if (cpus_weight(cpu_possible_map))
|
||||
set_c0_status(STATUSF_IP5);
|
||||
}
|
||||
|
||||
|
@ -94,7 +82,7 @@ void __init prom_prepare_cpus(unsigned int max_cpus)
|
|||
void prom_boot_secondary(int cpu, struct task_struct *idle)
|
||||
{
|
||||
unsigned long gp = (unsigned long) task_thread_info(idle);
|
||||
unsigned long sp = __KSTK_TOP(idle);
|
||||
unsigned long sp = __KSTK_TOS(idle);
|
||||
|
||||
secondary_sp = sp;
|
||||
secondary_gp = gp;
|
||||
|
|
|
@ -140,7 +140,7 @@ static __init void intr_clear_all(nasid_t nasid)
|
|||
REMOTE_HUB_CLR_INTR(nasid, i);
|
||||
}
|
||||
|
||||
void __init prom_prepare_cpus(unsigned int max_cpus)
|
||||
void __init plat_smp_setup(void)
|
||||
{
|
||||
cnodeid_t cnode;
|
||||
|
||||
|
@ -161,6 +161,11 @@ void __init prom_prepare_cpus(unsigned int max_cpus)
|
|||
alloc_cpupda(0, 0);
|
||||
}
|
||||
|
||||
void __init plat_prepare_cpus(unsigned int max_cpus)
|
||||
{
|
||||
/* We already did everything necessary earlier */
|
||||
}
|
||||
|
||||
/*
|
||||
* Launch a slave into smp_bootstrap(). It doesn't take an argument, and we
|
||||
* set sp to the kernel stack of the newly created idle process, gp to the proc
|
||||
|
|
|
@ -102,11 +102,11 @@ config SIMULATION
|
|||
Build a kernel suitable for running under the GDB simulator.
|
||||
Primarily adjusts the kernel's notion of time.
|
||||
|
||||
config CONFIG_SB1_CEX_ALWAYS_FATAL
|
||||
config SB1_CEX_ALWAYS_FATAL
|
||||
bool "All cache exceptions considered fatal (no recovery attempted)"
|
||||
depends on SIBYTE_SB1xxx_SOC
|
||||
|
||||
config CONFIG_SB1_CERR_STALL
|
||||
config SB1_CERR_STALL
|
||||
bool "Stall (rather than panic) on fatal cache error"
|
||||
depends on SIBYTE_SB1xxx_SOC
|
||||
|
||||
|
|
|
@ -139,7 +139,7 @@ void bcm1480_unmask_irq(int cpu, int irq)
|
|||
#ifdef CONFIG_SMP
|
||||
static void bcm1480_set_affinity(unsigned int irq, cpumask_t mask)
|
||||
{
|
||||
int i = 0, old_cpu, cpu, int_on;
|
||||
int i = 0, old_cpu, cpu, int_on, k;
|
||||
u64 cur_ints;
|
||||
irq_desc_t *desc = irq_desc + irq;
|
||||
unsigned long flags;
|
||||
|
@ -165,7 +165,6 @@ static void bcm1480_set_affinity(unsigned int irq, cpumask_t mask)
|
|||
irq_dirty -= BCM1480_NR_IRQS_HALF;
|
||||
}
|
||||
|
||||
int k;
|
||||
for (k=0; k<2; k++) { /* Loop through high and low interrupt mask register */
|
||||
cur_ints = ____raw_readq(IOADDR(A_BCM1480_IMR_MAPPER(old_cpu) + R_BCM1480_IMR_INTERRUPT_MASK_H + (k*BCM1480_IMR_HL_SPACING)));
|
||||
int_on = !(cur_ints & (((u64) 1) << irq_dirty));
|
||||
|
@ -216,6 +215,7 @@ static void ack_bcm1480_irq(unsigned int irq)
|
|||
{
|
||||
u64 pending;
|
||||
unsigned int irq_dirty;
|
||||
int k;
|
||||
|
||||
/*
|
||||
* If the interrupt was an HT interrupt, now is the time to
|
||||
|
@ -227,7 +227,6 @@ static void ack_bcm1480_irq(unsigned int irq)
|
|||
if ((irq_dirty >= BCM1480_NR_IRQS_HALF) && (irq_dirty <= BCM1480_NR_IRQS)) {
|
||||
irq_dirty -= BCM1480_NR_IRQS_HALF;
|
||||
}
|
||||
int k;
|
||||
for (k=0; k<2; k++) { /* Loop through high and low LDT interrupts */
|
||||
pending = __raw_readq(IOADDR(A_BCM1480_IMR_REGISTER(bcm1480_irq_owner[irq],
|
||||
R_BCM1480_IMR_LDT_INTERRUPT_H + (k*BCM1480_IMR_HL_SPACING))));
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
*
|
||||
* Common setup before any secondaries are started
|
||||
*/
|
||||
void __init prom_prepare_cpus(unsigned int max_cpus)
|
||||
void __init plat_smp_setup(void)
|
||||
{
|
||||
int i, num;
|
||||
|
||||
|
@ -40,14 +40,18 @@ void __init prom_prepare_cpus(unsigned int max_cpus)
|
|||
__cpu_number_map[0] = 0;
|
||||
__cpu_logical_map[0] = 0;
|
||||
|
||||
for (i=1, num=0; i<NR_CPUS; i++) {
|
||||
for (i = 1, num = 0; i < NR_CPUS; i++) {
|
||||
if (cfe_cpu_stop(i) == 0) {
|
||||
cpu_set(i, phys_cpu_present_map);
|
||||
__cpu_number_map[i] = ++num;
|
||||
__cpu_logical_map[num] = i;
|
||||
}
|
||||
}
|
||||
printk("Detected %i available secondary CPU(s)\n", num);
|
||||
printk(KERN_INFO "Detected %i available secondary CPU(s)\n", num);
|
||||
}
|
||||
|
||||
void __init plat_prepare_cpus(unsigned int max_cpus)
|
||||
{
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -963,7 +963,7 @@ source "arch/powerpc/oprofile/Kconfig"
|
|||
|
||||
config KPROBES
|
||||
bool "Kprobes (EXPERIMENTAL)"
|
||||
depends on PPC64
|
||||
depends on PPC64 && EXPERIMENTAL && MODULES
|
||||
help
|
||||
Kprobes allows you to trap at almost any kernel address and
|
||||
execute a callback function. register_kprobe() establishes
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.15-rc5
|
||||
# Tue Dec 20 15:59:30 2005
|
||||
# Linux kernel version: 2.6.16-rc2
|
||||
# Fri Feb 10 17:33:08 2006
|
||||
#
|
||||
CONFIG_PPC64=y
|
||||
CONFIG_64BIT=y
|
||||
|
@ -16,6 +16,10 @@ CONFIG_COMPAT=y
|
|||
CONFIG_SYSVIPC_COMPAT=y
|
||||
CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
|
||||
CONFIG_ARCH_MAY_HAVE_PC_FDC=y
|
||||
CONFIG_PPC_OF=y
|
||||
# CONFIG_PPC_UDBG_16550 is not set
|
||||
CONFIG_GENERIC_TBSYNC=y
|
||||
# CONFIG_DEFAULT_UIMAGE is not set
|
||||
|
||||
#
|
||||
# Processor support
|
||||
|
@ -26,13 +30,12 @@ CONFIG_PPC_FPU=y
|
|||
CONFIG_ALTIVEC=y
|
||||
CONFIG_PPC_STD_MMU=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_NR_CPUS=2
|
||||
CONFIG_NR_CPUS=4
|
||||
|
||||
#
|
||||
# Code maturity level options
|
||||
#
|
||||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_CLEAN_COMPILE=y
|
||||
CONFIG_LOCK_KERNEL=y
|
||||
CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||
|
||||
|
@ -47,8 +50,6 @@ CONFIG_POSIX_MQUEUE=y
|
|||
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||
CONFIG_SYSCTL=y
|
||||
# CONFIG_AUDIT is not set
|
||||
CONFIG_HOTPLUG=y
|
||||
CONFIG_KOBJECT_UEVENT=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
# CONFIG_CPUSETS is not set
|
||||
|
@ -58,8 +59,10 @@ CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
|||
CONFIG_KALLSYMS=y
|
||||
# CONFIG_KALLSYMS_ALL is not set
|
||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||
CONFIG_HOTPLUG=y
|
||||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_ELF_CORE=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
|
@ -68,8 +71,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0
|
|||
CONFIG_CC_ALIGN_LABELS=0
|
||||
CONFIG_CC_ALIGN_LOOPS=0
|
||||
CONFIG_CC_ALIGN_JUMPS=0
|
||||
CONFIG_SLAB=y
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=0
|
||||
# CONFIG_SLOB is not set
|
||||
|
||||
#
|
||||
# Loadable module support
|
||||
|
@ -112,13 +117,12 @@ CONFIG_PPC_PMAC=y
|
|||
CONFIG_PPC_PMAC64=y
|
||||
# CONFIG_PPC_MAPLE is not set
|
||||
# CONFIG_PPC_CELL is not set
|
||||
CONFIG_PPC_OF=y
|
||||
CONFIG_U3_DART=y
|
||||
CONFIG_MPIC=y
|
||||
# CONFIG_PPC_RTAS is not set
|
||||
# CONFIG_MMIO_NVRAM is not set
|
||||
CONFIG_MPIC_BROKEN_U3=y
|
||||
# CONFIG_PPC_MPC106 is not set
|
||||
CONFIG_GENERIC_TBSYNC=y
|
||||
CONFIG_CPU_FREQ=y
|
||||
CONFIG_CPU_FREQ_TABLE=y
|
||||
# CONFIG_CPU_FREQ_DEBUG is not set
|
||||
|
@ -151,6 +155,7 @@ CONFIG_FORCE_MAX_ZONEORDER=13
|
|||
CONFIG_IOMMU_VMERGE=y
|
||||
# CONFIG_HOTPLUG_CPU is not set
|
||||
CONFIG_KEXEC=y
|
||||
# CONFIG_CRASH_DUMP is not set
|
||||
CONFIG_IRQ_ALL_CPUS=y
|
||||
# CONFIG_NUMA is not set
|
||||
CONFIG_ARCH_SELECT_MEMORY_MODEL=y
|
||||
|
@ -202,6 +207,7 @@ CONFIG_NET=y
|
|||
#
|
||||
# Networking options
|
||||
#
|
||||
# CONFIG_NETDEBUG is not set
|
||||
CONFIG_PACKET=y
|
||||
# CONFIG_PACKET_MMAP is not set
|
||||
CONFIG_UNIX=y
|
||||
|
@ -239,6 +245,7 @@ CONFIG_NETFILTER=y
|
|||
# Core Netfilter Configuration
|
||||
#
|
||||
# CONFIG_NETFILTER_NETLINK is not set
|
||||
# CONFIG_NETFILTER_XTABLES is not set
|
||||
|
||||
#
|
||||
# IP: Netfilter Configuration
|
||||
|
@ -255,65 +262,6 @@ CONFIG_IP_NF_TFTP=m
|
|||
CONFIG_IP_NF_AMANDA=m
|
||||
# CONFIG_IP_NF_PPTP is not set
|
||||
CONFIG_IP_NF_QUEUE=m
|
||||
CONFIG_IP_NF_IPTABLES=m
|
||||
CONFIG_IP_NF_MATCH_LIMIT=m
|
||||
CONFIG_IP_NF_MATCH_IPRANGE=m
|
||||
CONFIG_IP_NF_MATCH_MAC=m
|
||||
CONFIG_IP_NF_MATCH_PKTTYPE=m
|
||||
CONFIG_IP_NF_MATCH_MARK=m
|
||||
CONFIG_IP_NF_MATCH_MULTIPORT=m
|
||||
CONFIG_IP_NF_MATCH_TOS=m
|
||||
CONFIG_IP_NF_MATCH_RECENT=m
|
||||
CONFIG_IP_NF_MATCH_ECN=m
|
||||
CONFIG_IP_NF_MATCH_DSCP=m
|
||||
CONFIG_IP_NF_MATCH_AH_ESP=m
|
||||
CONFIG_IP_NF_MATCH_LENGTH=m
|
||||
CONFIG_IP_NF_MATCH_TTL=m
|
||||
CONFIG_IP_NF_MATCH_TCPMSS=m
|
||||
CONFIG_IP_NF_MATCH_HELPER=m
|
||||
CONFIG_IP_NF_MATCH_STATE=m
|
||||
CONFIG_IP_NF_MATCH_CONNTRACK=m
|
||||
CONFIG_IP_NF_MATCH_OWNER=m
|
||||
CONFIG_IP_NF_MATCH_ADDRTYPE=m
|
||||
CONFIG_IP_NF_MATCH_REALM=m
|
||||
CONFIG_IP_NF_MATCH_SCTP=m
|
||||
# CONFIG_IP_NF_MATCH_DCCP is not set
|
||||
CONFIG_IP_NF_MATCH_COMMENT=m
|
||||
CONFIG_IP_NF_MATCH_CONNMARK=m
|
||||
CONFIG_IP_NF_MATCH_CONNBYTES=m
|
||||
CONFIG_IP_NF_MATCH_HASHLIMIT=m
|
||||
CONFIG_IP_NF_MATCH_STRING=m
|
||||
CONFIG_IP_NF_FILTER=m
|
||||
CONFIG_IP_NF_TARGET_REJECT=m
|
||||
CONFIG_IP_NF_TARGET_LOG=m
|
||||
CONFIG_IP_NF_TARGET_ULOG=m
|
||||
CONFIG_IP_NF_TARGET_TCPMSS=m
|
||||
CONFIG_IP_NF_TARGET_NFQUEUE=m
|
||||
CONFIG_IP_NF_NAT=m
|
||||
CONFIG_IP_NF_NAT_NEEDED=y
|
||||
CONFIG_IP_NF_TARGET_MASQUERADE=m
|
||||
CONFIG_IP_NF_TARGET_REDIRECT=m
|
||||
CONFIG_IP_NF_TARGET_NETMAP=m
|
||||
CONFIG_IP_NF_TARGET_SAME=m
|
||||
CONFIG_IP_NF_NAT_SNMP_BASIC=m
|
||||
CONFIG_IP_NF_NAT_IRC=m
|
||||
CONFIG_IP_NF_NAT_FTP=m
|
||||
CONFIG_IP_NF_NAT_TFTP=m
|
||||
CONFIG_IP_NF_NAT_AMANDA=m
|
||||
CONFIG_IP_NF_MANGLE=m
|
||||
CONFIG_IP_NF_TARGET_TOS=m
|
||||
CONFIG_IP_NF_TARGET_ECN=m
|
||||
CONFIG_IP_NF_TARGET_DSCP=m
|
||||
CONFIG_IP_NF_TARGET_MARK=m
|
||||
CONFIG_IP_NF_TARGET_CLASSIFY=m
|
||||
CONFIG_IP_NF_TARGET_TTL=m
|
||||
CONFIG_IP_NF_TARGET_CONNMARK=m
|
||||
CONFIG_IP_NF_TARGET_CLUSTERIP=m
|
||||
CONFIG_IP_NF_RAW=m
|
||||
CONFIG_IP_NF_TARGET_NOTRACK=m
|
||||
CONFIG_IP_NF_ARPTABLES=m
|
||||
CONFIG_IP_NF_ARPFILTER=m
|
||||
CONFIG_IP_NF_ARP_MANGLE=m
|
||||
|
||||
#
|
||||
# DCCP Configuration (EXPERIMENTAL)
|
||||
|
@ -324,6 +272,11 @@ CONFIG_IP_NF_ARP_MANGLE=m
|
|||
# SCTP Configuration (EXPERIMENTAL)
|
||||
#
|
||||
# CONFIG_IP_SCTP is not set
|
||||
|
||||
#
|
||||
# TIPC Configuration (EXPERIMENTAL)
|
||||
#
|
||||
# CONFIG_TIPC is not set
|
||||
# CONFIG_ATM is not set
|
||||
# CONFIG_BRIDGE is not set
|
||||
# CONFIG_VLAN_8021Q is not set
|
||||
|
@ -342,7 +295,6 @@ CONFIG_LLC=y
|
|||
# QoS and/or fair queueing
|
||||
#
|
||||
# CONFIG_NET_SCHED is not set
|
||||
CONFIG_NET_CLS_ROUTE=y
|
||||
|
||||
#
|
||||
# Network testing
|
||||
|
@ -545,13 +497,7 @@ CONFIG_SCSI_SATA_SVW=y
|
|||
# CONFIG_SCSI_IPR is not set
|
||||
# CONFIG_SCSI_QLOGIC_FC is not set
|
||||
# CONFIG_SCSI_QLOGIC_1280 is not set
|
||||
CONFIG_SCSI_QLA2XXX=y
|
||||
# CONFIG_SCSI_QLA21XX is not set
|
||||
# CONFIG_SCSI_QLA22XX is not set
|
||||
# CONFIG_SCSI_QLA2300 is not set
|
||||
# CONFIG_SCSI_QLA2322 is not set
|
||||
# CONFIG_SCSI_QLA6312 is not set
|
||||
# CONFIG_SCSI_QLA24XX is not set
|
||||
# CONFIG_SCSI_QLA_FC is not set
|
||||
# CONFIG_SCSI_LPFC is not set
|
||||
# CONFIG_SCSI_DC395x is not set
|
||||
# CONFIG_SCSI_DC390T is not set
|
||||
|
@ -614,7 +560,6 @@ CONFIG_IEEE1394_SBP2=m
|
|||
CONFIG_IEEE1394_ETH1394=m
|
||||
CONFIG_IEEE1394_DV1394=m
|
||||
CONFIG_IEEE1394_RAWIO=y
|
||||
# CONFIG_IEEE1394_CMP is not set
|
||||
|
||||
#
|
||||
# I2O device support
|
||||
|
@ -630,6 +575,7 @@ CONFIG_THERM_PM72=y
|
|||
CONFIG_WINDFARM=y
|
||||
CONFIG_WINDFARM_PM81=y
|
||||
CONFIG_WINDFARM_PM91=y
|
||||
CONFIG_WINDFARM_PM112=y
|
||||
|
||||
#
|
||||
# Network device support
|
||||
|
@ -682,8 +628,9 @@ CONFIG_E1000=y
|
|||
# CONFIG_R8169 is not set
|
||||
# CONFIG_SIS190 is not set
|
||||
# CONFIG_SKGE is not set
|
||||
# CONFIG_SKY2 is not set
|
||||
# CONFIG_SK98LIN is not set
|
||||
CONFIG_TIGON3=m
|
||||
CONFIG_TIGON3=y
|
||||
# CONFIG_BNX2 is not set
|
||||
# CONFIG_MV643XX_ETH is not set
|
||||
|
||||
|
@ -861,8 +808,7 @@ CONFIG_I2C_ALGOBIT=y
|
|||
# CONFIG_I2C_I801 is not set
|
||||
# CONFIG_I2C_I810 is not set
|
||||
# CONFIG_I2C_PIIX4 is not set
|
||||
CONFIG_I2C_KEYWEST=y
|
||||
CONFIG_I2C_PMAC_SMU=y
|
||||
CONFIG_I2C_POWERMAC=y
|
||||
# CONFIG_I2C_NFORCE2 is not set
|
||||
# CONFIG_I2C_PARPORT_LIGHT is not set
|
||||
# CONFIG_I2C_PROSAVAGE is not set
|
||||
|
@ -894,6 +840,12 @@ CONFIG_I2C_PMAC_SMU=y
|
|||
# CONFIG_I2C_DEBUG_BUS is not set
|
||||
# CONFIG_I2C_DEBUG_CHIP is not set
|
||||
|
||||
#
|
||||
# SPI support
|
||||
#
|
||||
# CONFIG_SPI is not set
|
||||
# CONFIG_SPI_MASTER is not set
|
||||
|
||||
#
|
||||
# Dallas's 1-wire bus
|
||||
#
|
||||
|
@ -961,7 +913,6 @@ CONFIG_FB_RADEON_I2C=y
|
|||
# CONFIG_FB_KYRO is not set
|
||||
# CONFIG_FB_3DFX is not set
|
||||
# CONFIG_FB_VOODOO1 is not set
|
||||
# CONFIG_FB_CYBLA is not set
|
||||
# CONFIG_FB_TRIDENT is not set
|
||||
# CONFIG_FB_VIRTUAL is not set
|
||||
|
||||
|
@ -1008,9 +959,10 @@ CONFIG_SND_OSSEMUL=y
|
|||
CONFIG_SND_MIXER_OSS=m
|
||||
CONFIG_SND_PCM_OSS=m
|
||||
CONFIG_SND_SEQUENCER_OSS=y
|
||||
# CONFIG_SND_DYNAMIC_MINORS is not set
|
||||
CONFIG_SND_SUPPORT_OLD_API=y
|
||||
# CONFIG_SND_VERBOSE_PRINTK is not set
|
||||
# CONFIG_SND_DEBUG is not set
|
||||
CONFIG_SND_GENERIC_DRIVER=y
|
||||
|
||||
#
|
||||
# Generic devices
|
||||
|
@ -1024,6 +976,8 @@ CONFIG_SND_GENERIC_DRIVER=y
|
|||
#
|
||||
# PCI devices
|
||||
#
|
||||
# CONFIG_SND_AD1889 is not set
|
||||
# CONFIG_SND_ALS4000 is not set
|
||||
# CONFIG_SND_ALI5451 is not set
|
||||
# CONFIG_SND_ATIIXP is not set
|
||||
# CONFIG_SND_ATIIXP_MODEM is not set
|
||||
|
@ -1032,39 +986,38 @@ CONFIG_SND_GENERIC_DRIVER=y
|
|||
# CONFIG_SND_AU8830 is not set
|
||||
# CONFIG_SND_AZT3328 is not set
|
||||
# CONFIG_SND_BT87X is not set
|
||||
# CONFIG_SND_CS46XX is not set
|
||||
# CONFIG_SND_CA0106 is not set
|
||||
# CONFIG_SND_CMIPCI is not set
|
||||
# CONFIG_SND_CS4281 is not set
|
||||
# CONFIG_SND_CS46XX is not set
|
||||
# CONFIG_SND_EMU10K1 is not set
|
||||
# CONFIG_SND_EMU10K1X is not set
|
||||
# CONFIG_SND_CA0106 is not set
|
||||
# CONFIG_SND_KORG1212 is not set
|
||||
# CONFIG_SND_MIXART is not set
|
||||
# CONFIG_SND_NM256 is not set
|
||||
# CONFIG_SND_RME32 is not set
|
||||
# CONFIG_SND_RME96 is not set
|
||||
# CONFIG_SND_RME9652 is not set
|
||||
# CONFIG_SND_HDSP is not set
|
||||
# CONFIG_SND_HDSPM is not set
|
||||
# CONFIG_SND_TRIDENT is not set
|
||||
# CONFIG_SND_YMFPCI is not set
|
||||
# CONFIG_SND_AD1889 is not set
|
||||
# CONFIG_SND_ALS4000 is not set
|
||||
# CONFIG_SND_CMIPCI is not set
|
||||
# CONFIG_SND_ENS1370 is not set
|
||||
# CONFIG_SND_ENS1371 is not set
|
||||
# CONFIG_SND_ES1938 is not set
|
||||
# CONFIG_SND_ES1968 is not set
|
||||
# CONFIG_SND_MAESTRO3 is not set
|
||||
# CONFIG_SND_FM801 is not set
|
||||
# CONFIG_SND_HDA_INTEL is not set
|
||||
# CONFIG_SND_HDSP is not set
|
||||
# CONFIG_SND_HDSPM is not set
|
||||
# CONFIG_SND_ICE1712 is not set
|
||||
# CONFIG_SND_ICE1724 is not set
|
||||
# CONFIG_SND_INTEL8X0 is not set
|
||||
# CONFIG_SND_INTEL8X0M is not set
|
||||
# CONFIG_SND_KORG1212 is not set
|
||||
# CONFIG_SND_MAESTRO3 is not set
|
||||
# CONFIG_SND_MIXART is not set
|
||||
# CONFIG_SND_NM256 is not set
|
||||
# CONFIG_SND_PCXHR is not set
|
||||
# CONFIG_SND_RME32 is not set
|
||||
# CONFIG_SND_RME96 is not set
|
||||
# CONFIG_SND_RME9652 is not set
|
||||
# CONFIG_SND_SONICVIBES is not set
|
||||
# CONFIG_SND_TRIDENT is not set
|
||||
# CONFIG_SND_VIA82XX is not set
|
||||
# CONFIG_SND_VIA82XX_MODEM is not set
|
||||
# CONFIG_SND_VX222 is not set
|
||||
# CONFIG_SND_HDA_INTEL is not set
|
||||
# CONFIG_SND_YMFPCI is not set
|
||||
|
||||
#
|
||||
# ALSA PowerMac devices
|
||||
|
@ -1136,13 +1089,16 @@ CONFIG_USB_STORAGE_DPCM=y
|
|||
CONFIG_USB_STORAGE_SDDR09=y
|
||||
CONFIG_USB_STORAGE_SDDR55=y
|
||||
CONFIG_USB_STORAGE_JUMPSHOT=y
|
||||
# CONFIG_USB_STORAGE_ALAUDA is not set
|
||||
# CONFIG_USB_STORAGE_ONETOUCH is not set
|
||||
# CONFIG_USB_LIBUSUAL is not set
|
||||
|
||||
#
|
||||
# USB Input Devices
|
||||
#
|
||||
CONFIG_USB_HID=y
|
||||
CONFIG_USB_HIDINPUT=y
|
||||
# CONFIG_USB_HIDINPUT_POWERBOOK is not set
|
||||
CONFIG_HID_FF=y
|
||||
CONFIG_HID_PID=y
|
||||
CONFIG_LOGITECH_FF=y
|
||||
|
@ -1159,6 +1115,7 @@ CONFIG_USB_HIDDEV=y
|
|||
# CONFIG_USB_YEALINK is not set
|
||||
# CONFIG_USB_XPAD is not set
|
||||
# CONFIG_USB_ATI_REMOTE is not set
|
||||
# CONFIG_USB_ATI_REMOTE2 is not set
|
||||
# CONFIG_USB_KEYSPAN_REMOTE is not set
|
||||
# CONFIG_USB_APPLETOUCH is not set
|
||||
|
||||
|
@ -1207,6 +1164,7 @@ CONFIG_USB_SERIAL_GENERIC=y
|
|||
# CONFIG_USB_SERIAL_AIRPRIME is not set
|
||||
# CONFIG_USB_SERIAL_ANYDATA is not set
|
||||
CONFIG_USB_SERIAL_BELKIN=m
|
||||
# CONFIG_USB_SERIAL_WHITEHEAT is not set
|
||||
CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
|
||||
# CONFIG_USB_SERIAL_CP2101 is not set
|
||||
CONFIG_USB_SERIAL_CYPRESS_M8=m
|
||||
|
@ -1287,6 +1245,10 @@ CONFIG_USB_EZUSB=y
|
|||
# SN Devices
|
||||
#
|
||||
|
||||
#
|
||||
# EDAC - error detection and reporting (RAS)
|
||||
#
|
||||
|
||||
#
|
||||
# File systems
|
||||
#
|
||||
|
@ -1317,6 +1279,7 @@ CONFIG_XFS_EXPORT=y
|
|||
CONFIG_XFS_SECURITY=y
|
||||
CONFIG_XFS_POSIX_ACL=y
|
||||
# CONFIG_XFS_RT is not set
|
||||
# CONFIG_OCFS2_FS is not set
|
||||
# CONFIG_MINIX_FS is not set
|
||||
# CONFIG_ROMFS_FS is not set
|
||||
CONFIG_INOTIFY=y
|
||||
|
@ -1357,6 +1320,7 @@ CONFIG_HUGETLBFS=y
|
|||
CONFIG_HUGETLB_PAGE=y
|
||||
CONFIG_RAMFS=y
|
||||
# CONFIG_RELAYFS_FS is not set
|
||||
# CONFIG_CONFIGFS_FS is not set
|
||||
|
||||
#
|
||||
# Miscellaneous filesystems
|
||||
|
@ -1426,6 +1390,7 @@ CONFIG_MSDOS_PARTITION=y
|
|||
# CONFIG_SGI_PARTITION is not set
|
||||
# CONFIG_ULTRIX_PARTITION is not set
|
||||
# CONFIG_SUN_PARTITION is not set
|
||||
# CONFIG_KARMA_PARTITION is not set
|
||||
# CONFIG_EFI_PARTITION is not set
|
||||
|
||||
#
|
||||
|
@ -1481,10 +1446,6 @@ CONFIG_CRC32=y
|
|||
CONFIG_LIBCRC32C=m
|
||||
CONFIG_ZLIB_INFLATE=y
|
||||
CONFIG_ZLIB_DEFLATE=m
|
||||
CONFIG_TEXTSEARCH=y
|
||||
CONFIG_TEXTSEARCH_KMP=m
|
||||
CONFIG_TEXTSEARCH_BM=m
|
||||
CONFIG_TEXTSEARCH_FSM=m
|
||||
|
||||
#
|
||||
# Instrumentation Support
|
||||
|
@ -1497,24 +1458,31 @@ CONFIG_OPROFILE=y
|
|||
# Kernel hacking
|
||||
#
|
||||
# CONFIG_PRINTK_TIME is not set
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_LOG_BUF_SHIFT=17
|
||||
CONFIG_DETECT_SOFTLOCKUP=y
|
||||
# CONFIG_SCHEDSTATS is not set
|
||||
# CONFIG_DEBUG_SLAB is not set
|
||||
CONFIG_DEBUG_MUTEXES=y
|
||||
# CONFIG_DEBUG_SPINLOCK is not set
|
||||
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
||||
# CONFIG_DEBUG_KOBJECT is not set
|
||||
# CONFIG_DEBUG_INFO is not set
|
||||
CONFIG_DEBUG_FS=y
|
||||
# CONFIG_DEBUG_VM is not set
|
||||
CONFIG_FORCED_INLINING=y
|
||||
# CONFIG_RCU_TORTURE_TEST is not set
|
||||
# CONFIG_DEBUG_STACKOVERFLOW is not set
|
||||
# CONFIG_DEBUG_STACK_USAGE is not set
|
||||
# CONFIG_DEBUGGER is not set
|
||||
CONFIG_IRQSTACKS=y
|
||||
CONFIG_BOOTX_TEXT=y
|
||||
# CONFIG_PPC_EARLY_DEBUG_LPAR is not set
|
||||
# CONFIG_PPC_EARLY_DEBUG_G5 is not set
|
||||
# CONFIG_PPC_EARLY_DEBUG_RTAS is not set
|
||||
# CONFIG_PPC_EARLY_DEBUG_MAPLE is not set
|
||||
# CONFIG_PPC_EARLY_DEBUG_ISERIES is not set
|
||||
|
||||
#
|
||||
# Security options
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.15-rc5
|
||||
# Tue Dec 20 15:59:38 2005
|
||||
# Linux kernel version: 2.6.16-rc2
|
||||
# Fri Feb 10 17:32:14 2006
|
||||
#
|
||||
CONFIG_PPC64=y
|
||||
CONFIG_64BIT=y
|
||||
|
@ -16,6 +16,10 @@ CONFIG_COMPAT=y
|
|||
CONFIG_SYSVIPC_COMPAT=y
|
||||
CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
|
||||
CONFIG_ARCH_MAY_HAVE_PC_FDC=y
|
||||
CONFIG_PPC_OF=y
|
||||
CONFIG_PPC_UDBG_16550=y
|
||||
CONFIG_GENERIC_TBSYNC=y
|
||||
# CONFIG_DEFAULT_UIMAGE is not set
|
||||
|
||||
#
|
||||
# Processor support
|
||||
|
@ -33,7 +37,6 @@ CONFIG_NR_CPUS=32
|
|||
# Code maturity level options
|
||||
#
|
||||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_CLEAN_COMPILE=y
|
||||
CONFIG_LOCK_KERNEL=y
|
||||
CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||
|
||||
|
@ -48,8 +51,6 @@ CONFIG_POSIX_MQUEUE=y
|
|||
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||
CONFIG_SYSCTL=y
|
||||
# CONFIG_AUDIT is not set
|
||||
CONFIG_HOTPLUG=y
|
||||
CONFIG_KOBJECT_UEVENT=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_CPUSETS=y
|
||||
|
@ -59,8 +60,10 @@ CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
|||
CONFIG_KALLSYMS=y
|
||||
CONFIG_KALLSYMS_ALL=y
|
||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||
CONFIG_HOTPLUG=y
|
||||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_ELF_CORE=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
|
@ -69,8 +72,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0
|
|||
CONFIG_CC_ALIGN_LABELS=0
|
||||
CONFIG_CC_ALIGN_LOOPS=0
|
||||
CONFIG_CC_ALIGN_JUMPS=0
|
||||
CONFIG_SLAB=y
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=0
|
||||
# CONFIG_SLOB is not set
|
||||
|
||||
#
|
||||
# Loadable module support
|
||||
|
@ -113,7 +118,6 @@ CONFIG_PPC_PMAC=y
|
|||
CONFIG_PPC_PMAC64=y
|
||||
CONFIG_PPC_MAPLE=y
|
||||
# CONFIG_PPC_CELL is not set
|
||||
CONFIG_PPC_OF=y
|
||||
CONFIG_XICS=y
|
||||
CONFIG_U3_DART=y
|
||||
CONFIG_MPIC=y
|
||||
|
@ -124,8 +128,8 @@ CONFIG_RTAS_FLASH=m
|
|||
# CONFIG_MMIO_NVRAM is not set
|
||||
CONFIG_MPIC_BROKEN_U3=y
|
||||
CONFIG_IBMVIO=y
|
||||
# CONFIG_IBMEBUS is not set
|
||||
# CONFIG_PPC_MPC106 is not set
|
||||
CONFIG_GENERIC_TBSYNC=y
|
||||
CONFIG_CPU_FREQ=y
|
||||
CONFIG_CPU_FREQ_TABLE=y
|
||||
# CONFIG_CPU_FREQ_DEBUG is not set
|
||||
|
@ -158,6 +162,7 @@ CONFIG_FORCE_MAX_ZONEORDER=13
|
|||
CONFIG_IOMMU_VMERGE=y
|
||||
CONFIG_HOTPLUG_CPU=y
|
||||
CONFIG_KEXEC=y
|
||||
# CONFIG_CRASH_DUMP is not set
|
||||
CONFIG_IRQ_ALL_CPUS=y
|
||||
CONFIG_PPC_SPLPAR=y
|
||||
CONFIG_EEH=y
|
||||
|
@ -178,6 +183,7 @@ CONFIG_HAVE_MEMORY_PRESENT=y
|
|||
CONFIG_SPARSEMEM_EXTREME=y
|
||||
# CONFIG_MEMORY_HOTPLUG is not set
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||
CONFIG_MIGRATION=y
|
||||
# CONFIG_PPC_64K_PAGES is not set
|
||||
# CONFIG_SCHED_SMT is not set
|
||||
CONFIG_PROC_DEVICETREE=y
|
||||
|
@ -221,6 +227,7 @@ CONFIG_NET=y
|
|||
#
|
||||
# Networking options
|
||||
#
|
||||
# CONFIG_NETDEBUG is not set
|
||||
CONFIG_PACKET=y
|
||||
# CONFIG_PACKET_MMAP is not set
|
||||
CONFIG_UNIX=y
|
||||
|
@ -260,6 +267,7 @@ CONFIG_NETFILTER=y
|
|||
CONFIG_NETFILTER_NETLINK=y
|
||||
CONFIG_NETFILTER_NETLINK_QUEUE=m
|
||||
CONFIG_NETFILTER_NETLINK_LOG=m
|
||||
# CONFIG_NETFILTER_XTABLES is not set
|
||||
|
||||
#
|
||||
# IP: Netfilter Configuration
|
||||
|
@ -277,65 +285,6 @@ CONFIG_IP_NF_TFTP=m
|
|||
CONFIG_IP_NF_AMANDA=m
|
||||
# CONFIG_IP_NF_PPTP is not set
|
||||
CONFIG_IP_NF_QUEUE=m
|
||||
CONFIG_IP_NF_IPTABLES=m
|
||||
CONFIG_IP_NF_MATCH_LIMIT=m
|
||||
CONFIG_IP_NF_MATCH_IPRANGE=m
|
||||
CONFIG_IP_NF_MATCH_MAC=m
|
||||
CONFIG_IP_NF_MATCH_PKTTYPE=m
|
||||
CONFIG_IP_NF_MATCH_MARK=m
|
||||
CONFIG_IP_NF_MATCH_MULTIPORT=m
|
||||
CONFIG_IP_NF_MATCH_TOS=m
|
||||
CONFIG_IP_NF_MATCH_RECENT=m
|
||||
CONFIG_IP_NF_MATCH_ECN=m
|
||||
CONFIG_IP_NF_MATCH_DSCP=m
|
||||
CONFIG_IP_NF_MATCH_AH_ESP=m
|
||||
CONFIG_IP_NF_MATCH_LENGTH=m
|
||||
CONFIG_IP_NF_MATCH_TTL=m
|
||||
CONFIG_IP_NF_MATCH_TCPMSS=m
|
||||
CONFIG_IP_NF_MATCH_HELPER=m
|
||||
CONFIG_IP_NF_MATCH_STATE=m
|
||||
CONFIG_IP_NF_MATCH_CONNTRACK=m
|
||||
CONFIG_IP_NF_MATCH_OWNER=m
|
||||
CONFIG_IP_NF_MATCH_ADDRTYPE=m
|
||||
CONFIG_IP_NF_MATCH_REALM=m
|
||||
CONFIG_IP_NF_MATCH_SCTP=m
|
||||
CONFIG_IP_NF_MATCH_DCCP=m
|
||||
CONFIG_IP_NF_MATCH_COMMENT=m
|
||||
CONFIG_IP_NF_MATCH_CONNMARK=m
|
||||
CONFIG_IP_NF_MATCH_CONNBYTES=m
|
||||
CONFIG_IP_NF_MATCH_HASHLIMIT=m
|
||||
CONFIG_IP_NF_MATCH_STRING=m
|
||||
CONFIG_IP_NF_FILTER=m
|
||||
CONFIG_IP_NF_TARGET_REJECT=m
|
||||
CONFIG_IP_NF_TARGET_LOG=m
|
||||
CONFIG_IP_NF_TARGET_ULOG=m
|
||||
CONFIG_IP_NF_TARGET_TCPMSS=m
|
||||
CONFIG_IP_NF_TARGET_NFQUEUE=m
|
||||
CONFIG_IP_NF_NAT=m
|
||||
CONFIG_IP_NF_NAT_NEEDED=y
|
||||
CONFIG_IP_NF_TARGET_MASQUERADE=m
|
||||
CONFIG_IP_NF_TARGET_REDIRECT=m
|
||||
CONFIG_IP_NF_TARGET_NETMAP=m
|
||||
CONFIG_IP_NF_TARGET_SAME=m
|
||||
CONFIG_IP_NF_NAT_SNMP_BASIC=m
|
||||
CONFIG_IP_NF_NAT_IRC=m
|
||||
CONFIG_IP_NF_NAT_FTP=m
|
||||
CONFIG_IP_NF_NAT_TFTP=m
|
||||
CONFIG_IP_NF_NAT_AMANDA=m
|
||||
CONFIG_IP_NF_MANGLE=m
|
||||
CONFIG_IP_NF_TARGET_TOS=m
|
||||
CONFIG_IP_NF_TARGET_ECN=m
|
||||
CONFIG_IP_NF_TARGET_DSCP=m
|
||||
CONFIG_IP_NF_TARGET_MARK=m
|
||||
CONFIG_IP_NF_TARGET_CLASSIFY=m
|
||||
CONFIG_IP_NF_TARGET_TTL=m
|
||||
CONFIG_IP_NF_TARGET_CONNMARK=m
|
||||
CONFIG_IP_NF_TARGET_CLUSTERIP=m
|
||||
CONFIG_IP_NF_RAW=m
|
||||
CONFIG_IP_NF_TARGET_NOTRACK=m
|
||||
CONFIG_IP_NF_ARPTABLES=m
|
||||
CONFIG_IP_NF_ARPFILTER=m
|
||||
CONFIG_IP_NF_ARP_MANGLE=m
|
||||
|
||||
#
|
||||
# DCCP Configuration (EXPERIMENTAL)
|
||||
|
@ -346,6 +295,11 @@ CONFIG_IP_NF_ARP_MANGLE=m
|
|||
# SCTP Configuration (EXPERIMENTAL)
|
||||
#
|
||||
# CONFIG_IP_SCTP is not set
|
||||
|
||||
#
|
||||
# TIPC Configuration (EXPERIMENTAL)
|
||||
#
|
||||
# CONFIG_TIPC is not set
|
||||
# CONFIG_ATM is not set
|
||||
# CONFIG_BRIDGE is not set
|
||||
# CONFIG_VLAN_8021Q is not set
|
||||
|
@ -364,7 +318,6 @@ CONFIG_LLC=y
|
|||
# QoS and/or fair queueing
|
||||
#
|
||||
# CONFIG_NET_SCHED is not set
|
||||
CONFIG_NET_CLS_ROUTE=y
|
||||
|
||||
#
|
||||
# Network testing
|
||||
|
@ -572,13 +525,7 @@ CONFIG_SCSI_IPR_TRACE=y
|
|||
CONFIG_SCSI_IPR_DUMP=y
|
||||
# CONFIG_SCSI_QLOGIC_FC is not set
|
||||
# CONFIG_SCSI_QLOGIC_1280 is not set
|
||||
CONFIG_SCSI_QLA2XXX=y
|
||||
CONFIG_SCSI_QLA21XX=m
|
||||
CONFIG_SCSI_QLA22XX=m
|
||||
CONFIG_SCSI_QLA2300=m
|
||||
CONFIG_SCSI_QLA2322=m
|
||||
CONFIG_SCSI_QLA6312=m
|
||||
CONFIG_SCSI_QLA24XX=m
|
||||
# CONFIG_SCSI_QLA_FC is not set
|
||||
CONFIG_SCSI_LPFC=m
|
||||
# CONFIG_SCSI_DC395x is not set
|
||||
# CONFIG_SCSI_DC390T is not set
|
||||
|
@ -642,8 +589,6 @@ CONFIG_IEEE1394_SBP2=m
|
|||
CONFIG_IEEE1394_ETH1394=m
|
||||
CONFIG_IEEE1394_DV1394=m
|
||||
CONFIG_IEEE1394_RAWIO=y
|
||||
CONFIG_IEEE1394_CMP=m
|
||||
CONFIG_IEEE1394_AMDTP=m
|
||||
|
||||
#
|
||||
# I2O device support
|
||||
|
@ -659,6 +604,7 @@ CONFIG_THERM_PM72=y
|
|||
CONFIG_WINDFARM=y
|
||||
CONFIG_WINDFARM_PM81=y
|
||||
CONFIG_WINDFARM_PM91=y
|
||||
CONFIG_WINDFARM_PM112=y
|
||||
|
||||
#
|
||||
# Network device support
|
||||
|
@ -731,6 +677,7 @@ CONFIG_E1000=y
|
|||
# CONFIG_R8169 is not set
|
||||
# CONFIG_SIS190 is not set
|
||||
# CONFIG_SKGE is not set
|
||||
# CONFIG_SKY2 is not set
|
||||
# CONFIG_SK98LIN is not set
|
||||
# CONFIG_VIA_VELOCITY is not set
|
||||
CONFIG_TIGON3=y
|
||||
|
@ -853,6 +800,7 @@ CONFIG_HW_CONSOLE=y
|
|||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
CONFIG_SERIAL_8250_NR_UARTS=4
|
||||
CONFIG_SERIAL_8250_RUNTIME_UARTS=4
|
||||
# CONFIG_SERIAL_8250_EXTENDED is not set
|
||||
|
||||
#
|
||||
|
@ -880,6 +828,7 @@ CONFIG_HVCS=m
|
|||
# CONFIG_WATCHDOG is not set
|
||||
# CONFIG_RTC is not set
|
||||
CONFIG_GEN_RTC=y
|
||||
# CONFIG_GEN_RTC_X is not set
|
||||
# CONFIG_DTLK is not set
|
||||
# CONFIG_R3964 is not set
|
||||
# CONFIG_APPLICOM is not set
|
||||
|
@ -923,8 +872,7 @@ CONFIG_I2C_AMD8111=y
|
|||
# CONFIG_I2C_I801 is not set
|
||||
# CONFIG_I2C_I810 is not set
|
||||
# CONFIG_I2C_PIIX4 is not set
|
||||
CONFIG_I2C_KEYWEST=y
|
||||
CONFIG_I2C_PMAC_SMU=y
|
||||
CONFIG_I2C_POWERMAC=y
|
||||
# CONFIG_I2C_NFORCE2 is not set
|
||||
# CONFIG_I2C_PARPORT_LIGHT is not set
|
||||
# CONFIG_I2C_PROSAVAGE is not set
|
||||
|
@ -956,6 +904,12 @@ CONFIG_I2C_PMAC_SMU=y
|
|||
# CONFIG_I2C_DEBUG_BUS is not set
|
||||
# CONFIG_I2C_DEBUG_CHIP is not set
|
||||
|
||||
#
|
||||
# SPI support
|
||||
#
|
||||
# CONFIG_SPI is not set
|
||||
# CONFIG_SPI_MASTER is not set
|
||||
|
||||
#
|
||||
# Dallas's 1-wire bus
|
||||
#
|
||||
|
@ -1028,7 +982,6 @@ CONFIG_FB_RADEON_I2C=y
|
|||
# CONFIG_FB_KYRO is not set
|
||||
# CONFIG_FB_3DFX is not set
|
||||
# CONFIG_FB_VOODOO1 is not set
|
||||
# CONFIG_FB_CYBLA is not set
|
||||
# CONFIG_FB_TRIDENT is not set
|
||||
# CONFIG_FB_VIRTUAL is not set
|
||||
|
||||
|
@ -1073,9 +1026,10 @@ CONFIG_SND_OSSEMUL=y
|
|||
CONFIG_SND_MIXER_OSS=m
|
||||
CONFIG_SND_PCM_OSS=m
|
||||
CONFIG_SND_SEQUENCER_OSS=y
|
||||
# CONFIG_SND_DYNAMIC_MINORS is not set
|
||||
CONFIG_SND_SUPPORT_OLD_API=y
|
||||
# CONFIG_SND_VERBOSE_PRINTK is not set
|
||||
# CONFIG_SND_DEBUG is not set
|
||||
CONFIG_SND_GENERIC_DRIVER=y
|
||||
|
||||
#
|
||||
# Generic devices
|
||||
|
@ -1089,6 +1043,8 @@ CONFIG_SND_GENERIC_DRIVER=y
|
|||
#
|
||||
# PCI devices
|
||||
#
|
||||
# CONFIG_SND_AD1889 is not set
|
||||
# CONFIG_SND_ALS4000 is not set
|
||||
# CONFIG_SND_ALI5451 is not set
|
||||
# CONFIG_SND_ATIIXP is not set
|
||||
# CONFIG_SND_ATIIXP_MODEM is not set
|
||||
|
@ -1097,39 +1053,38 @@ CONFIG_SND_GENERIC_DRIVER=y
|
|||
# CONFIG_SND_AU8830 is not set
|
||||
# CONFIG_SND_AZT3328 is not set
|
||||
# CONFIG_SND_BT87X is not set
|
||||
# CONFIG_SND_CS46XX is not set
|
||||
# CONFIG_SND_CA0106 is not set
|
||||
# CONFIG_SND_CMIPCI is not set
|
||||
# CONFIG_SND_CS4281 is not set
|
||||
# CONFIG_SND_CS46XX is not set
|
||||
# CONFIG_SND_EMU10K1 is not set
|
||||
# CONFIG_SND_EMU10K1X is not set
|
||||
# CONFIG_SND_CA0106 is not set
|
||||
# CONFIG_SND_KORG1212 is not set
|
||||
# CONFIG_SND_MIXART is not set
|
||||
# CONFIG_SND_NM256 is not set
|
||||
# CONFIG_SND_RME32 is not set
|
||||
# CONFIG_SND_RME96 is not set
|
||||
# CONFIG_SND_RME9652 is not set
|
||||
# CONFIG_SND_HDSP is not set
|
||||
# CONFIG_SND_HDSPM is not set
|
||||
# CONFIG_SND_TRIDENT is not set
|
||||
# CONFIG_SND_YMFPCI is not set
|
||||
# CONFIG_SND_AD1889 is not set
|
||||
# CONFIG_SND_ALS4000 is not set
|
||||
# CONFIG_SND_CMIPCI is not set
|
||||
# CONFIG_SND_ENS1370 is not set
|
||||
# CONFIG_SND_ENS1371 is not set
|
||||
# CONFIG_SND_ES1938 is not set
|
||||
# CONFIG_SND_ES1968 is not set
|
||||
# CONFIG_SND_MAESTRO3 is not set
|
||||
# CONFIG_SND_FM801 is not set
|
||||
# CONFIG_SND_HDA_INTEL is not set
|
||||
# CONFIG_SND_HDSP is not set
|
||||
# CONFIG_SND_HDSPM is not set
|
||||
# CONFIG_SND_ICE1712 is not set
|
||||
# CONFIG_SND_ICE1724 is not set
|
||||
# CONFIG_SND_INTEL8X0 is not set
|
||||
# CONFIG_SND_INTEL8X0M is not set
|
||||
# CONFIG_SND_KORG1212 is not set
|
||||
# CONFIG_SND_MAESTRO3 is not set
|
||||
# CONFIG_SND_MIXART is not set
|
||||
# CONFIG_SND_NM256 is not set
|
||||
# CONFIG_SND_PCXHR is not set
|
||||
# CONFIG_SND_RME32 is not set
|
||||
# CONFIG_SND_RME96 is not set
|
||||
# CONFIG_SND_RME9652 is not set
|
||||
# CONFIG_SND_SONICVIBES is not set
|
||||
# CONFIG_SND_TRIDENT is not set
|
||||
# CONFIG_SND_VIA82XX is not set
|
||||
# CONFIG_SND_VIA82XX_MODEM is not set
|
||||
# CONFIG_SND_VX222 is not set
|
||||
# CONFIG_SND_HDA_INTEL is not set
|
||||
# CONFIG_SND_YMFPCI is not set
|
||||
|
||||
#
|
||||
# ALSA PowerMac devices
|
||||
|
@ -1201,13 +1156,16 @@ CONFIG_USB_STORAGE=m
|
|||
# CONFIG_USB_STORAGE_SDDR09 is not set
|
||||
# CONFIG_USB_STORAGE_SDDR55 is not set
|
||||
# CONFIG_USB_STORAGE_JUMPSHOT is not set
|
||||
# CONFIG_USB_STORAGE_ALAUDA is not set
|
||||
# CONFIG_USB_STORAGE_ONETOUCH is not set
|
||||
# CONFIG_USB_LIBUSUAL is not set
|
||||
|
||||
#
|
||||
# USB Input Devices
|
||||
#
|
||||
CONFIG_USB_HID=y
|
||||
CONFIG_USB_HIDINPUT=y
|
||||
# CONFIG_USB_HIDINPUT_POWERBOOK is not set
|
||||
# CONFIG_HID_FF is not set
|
||||
CONFIG_USB_HIDDEV=y
|
||||
# CONFIG_USB_AIPTEK is not set
|
||||
|
@ -1221,6 +1179,7 @@ CONFIG_USB_HIDDEV=y
|
|||
# CONFIG_USB_YEALINK is not set
|
||||
# CONFIG_USB_XPAD is not set
|
||||
# CONFIG_USB_ATI_REMOTE is not set
|
||||
# CONFIG_USB_ATI_REMOTE2 is not set
|
||||
# CONFIG_USB_KEYSPAN_REMOTE is not set
|
||||
# CONFIG_USB_APPLETOUCH is not set
|
||||
|
||||
|
@ -1306,6 +1265,10 @@ CONFIG_INFINIBAND_IPOIB=m
|
|||
# SN Devices
|
||||
#
|
||||
|
||||
#
|
||||
# EDAC - error detection and reporting (RAS)
|
||||
#
|
||||
|
||||
#
|
||||
# File systems
|
||||
#
|
||||
|
@ -1340,6 +1303,7 @@ CONFIG_XFS_EXPORT=y
|
|||
CONFIG_XFS_SECURITY=y
|
||||
CONFIG_XFS_POSIX_ACL=y
|
||||
# CONFIG_XFS_RT is not set
|
||||
# CONFIG_OCFS2_FS is not set
|
||||
# CONFIG_MINIX_FS is not set
|
||||
# CONFIG_ROMFS_FS is not set
|
||||
CONFIG_INOTIFY=y
|
||||
|
@ -1379,6 +1343,7 @@ CONFIG_HUGETLBFS=y
|
|||
CONFIG_HUGETLB_PAGE=y
|
||||
CONFIG_RAMFS=y
|
||||
# CONFIG_RELAYFS_FS is not set
|
||||
# CONFIG_CONFIGFS_FS is not set
|
||||
|
||||
#
|
||||
# Miscellaneous filesystems
|
||||
|
@ -1449,6 +1414,7 @@ CONFIG_MSDOS_PARTITION=y
|
|||
# CONFIG_SGI_PARTITION is not set
|
||||
# CONFIG_ULTRIX_PARTITION is not set
|
||||
# CONFIG_SUN_PARTITION is not set
|
||||
# CONFIG_KARMA_PARTITION is not set
|
||||
# CONFIG_EFI_PARTITION is not set
|
||||
|
||||
#
|
||||
|
@ -1504,10 +1470,6 @@ CONFIG_CRC32=y
|
|||
CONFIG_LIBCRC32C=m
|
||||
CONFIG_ZLIB_INFLATE=y
|
||||
CONFIG_ZLIB_DEFLATE=m
|
||||
CONFIG_TEXTSEARCH=y
|
||||
CONFIG_TEXTSEARCH_KMP=m
|
||||
CONFIG_TEXTSEARCH_BM=m
|
||||
CONFIG_TEXTSEARCH_FSM=m
|
||||
|
||||
#
|
||||
# Instrumentation Support
|
||||
|
@ -1520,18 +1482,20 @@ CONFIG_OPROFILE=y
|
|||
# Kernel hacking
|
||||
#
|
||||
# CONFIG_PRINTK_TIME is not set
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_LOG_BUF_SHIFT=17
|
||||
CONFIG_DETECT_SOFTLOCKUP=y
|
||||
# CONFIG_SCHEDSTATS is not set
|
||||
# CONFIG_DEBUG_SLAB is not set
|
||||
CONFIG_DEBUG_MUTEXES=y
|
||||
# CONFIG_DEBUG_SPINLOCK is not set
|
||||
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
||||
# CONFIG_DEBUG_KOBJECT is not set
|
||||
# CONFIG_DEBUG_INFO is not set
|
||||
CONFIG_DEBUG_FS=y
|
||||
# CONFIG_DEBUG_VM is not set
|
||||
CONFIG_FORCED_INLINING=y
|
||||
# CONFIG_RCU_TORTURE_TEST is not set
|
||||
CONFIG_DEBUG_STACKOVERFLOW=y
|
||||
CONFIG_DEBUG_STACK_USAGE=y
|
||||
|
@ -1540,6 +1504,11 @@ CONFIG_XMON=y
|
|||
# CONFIG_XMON_DEFAULT is not set
|
||||
CONFIG_IRQSTACKS=y
|
||||
CONFIG_BOOTX_TEXT=y
|
||||
# CONFIG_PPC_EARLY_DEBUG_LPAR is not set
|
||||
# CONFIG_PPC_EARLY_DEBUG_G5 is not set
|
||||
# CONFIG_PPC_EARLY_DEBUG_RTAS is not set
|
||||
# CONFIG_PPC_EARLY_DEBUG_MAPLE is not set
|
||||
# CONFIG_PPC_EARLY_DEBUG_ISERIES is not set
|
||||
|
||||
#
|
||||
# Security options
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.15-rc5
|
||||
# Tue Dec 20 15:59:40 2005
|
||||
# Linux kernel version: 2.6.16-rc2
|
||||
# Fri Feb 10 17:33:32 2006
|
||||
#
|
||||
CONFIG_PPC64=y
|
||||
CONFIG_64BIT=y
|
||||
|
@ -16,6 +16,10 @@ CONFIG_COMPAT=y
|
|||
CONFIG_SYSVIPC_COMPAT=y
|
||||
CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
|
||||
CONFIG_ARCH_MAY_HAVE_PC_FDC=y
|
||||
CONFIG_PPC_OF=y
|
||||
CONFIG_PPC_UDBG_16550=y
|
||||
# CONFIG_GENERIC_TBSYNC is not set
|
||||
# CONFIG_DEFAULT_UIMAGE is not set
|
||||
|
||||
#
|
||||
# Processor support
|
||||
|
@ -33,7 +37,6 @@ CONFIG_NR_CPUS=128
|
|||
# Code maturity level options
|
||||
#
|
||||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_CLEAN_COMPILE=y
|
||||
CONFIG_LOCK_KERNEL=y
|
||||
CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||
|
||||
|
@ -49,8 +52,6 @@ CONFIG_POSIX_MQUEUE=y
|
|||
CONFIG_SYSCTL=y
|
||||
CONFIG_AUDIT=y
|
||||
CONFIG_AUDITSYSCALL=y
|
||||
CONFIG_HOTPLUG=y
|
||||
CONFIG_KOBJECT_UEVENT=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_CPUSETS=y
|
||||
|
@ -60,8 +61,10 @@ CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
|||
CONFIG_KALLSYMS=y
|
||||
CONFIG_KALLSYMS_ALL=y
|
||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||
CONFIG_HOTPLUG=y
|
||||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_ELF_CORE=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
|
@ -70,8 +73,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0
|
|||
CONFIG_CC_ALIGN_LABELS=0
|
||||
CONFIG_CC_ALIGN_LOOPS=0
|
||||
CONFIG_CC_ALIGN_JUMPS=0
|
||||
CONFIG_SLAB=y
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=0
|
||||
# CONFIG_SLOB is not set
|
||||
|
||||
#
|
||||
# Loadable module support
|
||||
|
@ -113,7 +118,6 @@ CONFIG_PPC_PSERIES=y
|
|||
# CONFIG_PPC_PMAC is not set
|
||||
# CONFIG_PPC_MAPLE is not set
|
||||
# CONFIG_PPC_CELL is not set
|
||||
CONFIG_PPC_OF=y
|
||||
CONFIG_XICS=y
|
||||
# CONFIG_U3_DART is not set
|
||||
CONFIG_MPIC=y
|
||||
|
@ -123,8 +127,8 @@ CONFIG_RTAS_PROC=y
|
|||
CONFIG_RTAS_FLASH=m
|
||||
# CONFIG_MMIO_NVRAM is not set
|
||||
CONFIG_IBMVIO=y
|
||||
# CONFIG_IBMEBUS is not set
|
||||
# CONFIG_PPC_MPC106 is not set
|
||||
# CONFIG_GENERIC_TBSYNC is not set
|
||||
# CONFIG_CPU_FREQ is not set
|
||||
# CONFIG_WANT_EARLY_SERIAL is not set
|
||||
|
||||
|
@ -145,6 +149,7 @@ CONFIG_FORCE_MAX_ZONEORDER=13
|
|||
CONFIG_IOMMU_VMERGE=y
|
||||
CONFIG_HOTPLUG_CPU=y
|
||||
CONFIG_KEXEC=y
|
||||
# CONFIG_CRASH_DUMP is not set
|
||||
CONFIG_IRQ_ALL_CPUS=y
|
||||
CONFIG_PPC_SPLPAR=y
|
||||
CONFIG_EEH=y
|
||||
|
@ -165,6 +170,7 @@ CONFIG_HAVE_MEMORY_PRESENT=y
|
|||
CONFIG_SPARSEMEM_EXTREME=y
|
||||
# CONFIG_MEMORY_HOTPLUG is not set
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||
CONFIG_MIGRATION=y
|
||||
CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y
|
||||
# CONFIG_PPC_64K_PAGES is not set
|
||||
CONFIG_SCHED_SMT=y
|
||||
|
@ -209,6 +215,7 @@ CONFIG_NET=y
|
|||
#
|
||||
# Networking options
|
||||
#
|
||||
# CONFIG_NETDEBUG is not set
|
||||
CONFIG_PACKET=y
|
||||
# CONFIG_PACKET_MMAP is not set
|
||||
CONFIG_UNIX=y
|
||||
|
@ -248,6 +255,7 @@ CONFIG_NETFILTER=y
|
|||
CONFIG_NETFILTER_NETLINK=y
|
||||
CONFIG_NETFILTER_NETLINK_QUEUE=m
|
||||
CONFIG_NETFILTER_NETLINK_LOG=m
|
||||
# CONFIG_NETFILTER_XTABLES is not set
|
||||
|
||||
#
|
||||
# IP: Netfilter Configuration
|
||||
|
@ -265,65 +273,6 @@ CONFIG_IP_NF_TFTP=m
|
|||
CONFIG_IP_NF_AMANDA=m
|
||||
# CONFIG_IP_NF_PPTP is not set
|
||||
CONFIG_IP_NF_QUEUE=m
|
||||
CONFIG_IP_NF_IPTABLES=m
|
||||
CONFIG_IP_NF_MATCH_LIMIT=m
|
||||
CONFIG_IP_NF_MATCH_IPRANGE=m
|
||||
CONFIG_IP_NF_MATCH_MAC=m
|
||||
CONFIG_IP_NF_MATCH_PKTTYPE=m
|
||||
CONFIG_IP_NF_MATCH_MARK=m
|
||||
CONFIG_IP_NF_MATCH_MULTIPORT=m
|
||||
CONFIG_IP_NF_MATCH_TOS=m
|
||||
CONFIG_IP_NF_MATCH_RECENT=m
|
||||
CONFIG_IP_NF_MATCH_ECN=m
|
||||
CONFIG_IP_NF_MATCH_DSCP=m
|
||||
CONFIG_IP_NF_MATCH_AH_ESP=m
|
||||
CONFIG_IP_NF_MATCH_LENGTH=m
|
||||
CONFIG_IP_NF_MATCH_TTL=m
|
||||
CONFIG_IP_NF_MATCH_TCPMSS=m
|
||||
CONFIG_IP_NF_MATCH_HELPER=m
|
||||
CONFIG_IP_NF_MATCH_STATE=m
|
||||
CONFIG_IP_NF_MATCH_CONNTRACK=m
|
||||
CONFIG_IP_NF_MATCH_OWNER=m
|
||||
CONFIG_IP_NF_MATCH_ADDRTYPE=m
|
||||
CONFIG_IP_NF_MATCH_REALM=m
|
||||
CONFIG_IP_NF_MATCH_SCTP=m
|
||||
# CONFIG_IP_NF_MATCH_DCCP is not set
|
||||
CONFIG_IP_NF_MATCH_COMMENT=m
|
||||
CONFIG_IP_NF_MATCH_CONNMARK=m
|
||||
CONFIG_IP_NF_MATCH_CONNBYTES=m
|
||||
CONFIG_IP_NF_MATCH_HASHLIMIT=m
|
||||
CONFIG_IP_NF_MATCH_STRING=m
|
||||
CONFIG_IP_NF_FILTER=m
|
||||
CONFIG_IP_NF_TARGET_REJECT=m
|
||||
CONFIG_IP_NF_TARGET_LOG=m
|
||||
CONFIG_IP_NF_TARGET_ULOG=m
|
||||
CONFIG_IP_NF_TARGET_TCPMSS=m
|
||||
CONFIG_IP_NF_TARGET_NFQUEUE=m
|
||||
CONFIG_IP_NF_NAT=m
|
||||
CONFIG_IP_NF_NAT_NEEDED=y
|
||||
CONFIG_IP_NF_TARGET_MASQUERADE=m
|
||||
CONFIG_IP_NF_TARGET_REDIRECT=m
|
||||
CONFIG_IP_NF_TARGET_NETMAP=m
|
||||
CONFIG_IP_NF_TARGET_SAME=m
|
||||
CONFIG_IP_NF_NAT_SNMP_BASIC=m
|
||||
CONFIG_IP_NF_NAT_IRC=m
|
||||
CONFIG_IP_NF_NAT_FTP=m
|
||||
CONFIG_IP_NF_NAT_TFTP=m
|
||||
CONFIG_IP_NF_NAT_AMANDA=m
|
||||
CONFIG_IP_NF_MANGLE=m
|
||||
CONFIG_IP_NF_TARGET_TOS=m
|
||||
CONFIG_IP_NF_TARGET_ECN=m
|
||||
CONFIG_IP_NF_TARGET_DSCP=m
|
||||
CONFIG_IP_NF_TARGET_MARK=m
|
||||
CONFIG_IP_NF_TARGET_CLASSIFY=m
|
||||
CONFIG_IP_NF_TARGET_TTL=m
|
||||
CONFIG_IP_NF_TARGET_CONNMARK=m
|
||||
CONFIG_IP_NF_TARGET_CLUSTERIP=m
|
||||
CONFIG_IP_NF_RAW=m
|
||||
CONFIG_IP_NF_TARGET_NOTRACK=m
|
||||
CONFIG_IP_NF_ARPTABLES=m
|
||||
CONFIG_IP_NF_ARPFILTER=m
|
||||
CONFIG_IP_NF_ARP_MANGLE=m
|
||||
|
||||
#
|
||||
# DCCP Configuration (EXPERIMENTAL)
|
||||
|
@ -334,6 +283,11 @@ CONFIG_IP_NF_ARP_MANGLE=m
|
|||
# SCTP Configuration (EXPERIMENTAL)
|
||||
#
|
||||
# CONFIG_IP_SCTP is not set
|
||||
|
||||
#
|
||||
# TIPC Configuration (EXPERIMENTAL)
|
||||
#
|
||||
# CONFIG_TIPC is not set
|
||||
# CONFIG_ATM is not set
|
||||
# CONFIG_BRIDGE is not set
|
||||
# CONFIG_VLAN_8021Q is not set
|
||||
|
@ -352,7 +306,6 @@ CONFIG_LLC=y
|
|||
# QoS and/or fair queueing
|
||||
#
|
||||
# CONFIG_NET_SCHED is not set
|
||||
CONFIG_NET_CLS_ROUTE=y
|
||||
|
||||
#
|
||||
# Network testing
|
||||
|
@ -550,13 +503,7 @@ CONFIG_SCSI_IPR_TRACE=y
|
|||
CONFIG_SCSI_IPR_DUMP=y
|
||||
# CONFIG_SCSI_QLOGIC_FC is not set
|
||||
# CONFIG_SCSI_QLOGIC_1280 is not set
|
||||
CONFIG_SCSI_QLA2XXX=y
|
||||
CONFIG_SCSI_QLA21XX=m
|
||||
CONFIG_SCSI_QLA22XX=m
|
||||
CONFIG_SCSI_QLA2300=m
|
||||
CONFIG_SCSI_QLA2322=m
|
||||
CONFIG_SCSI_QLA6312=m
|
||||
CONFIG_SCSI_QLA24XX=m
|
||||
# CONFIG_SCSI_QLA_FC is not set
|
||||
CONFIG_SCSI_LPFC=m
|
||||
# CONFIG_SCSI_DC395x is not set
|
||||
# CONFIG_SCSI_DC390T is not set
|
||||
|
@ -678,6 +625,7 @@ CONFIG_E1000=y
|
|||
# CONFIG_R8169 is not set
|
||||
# CONFIG_SIS190 is not set
|
||||
# CONFIG_SKGE is not set
|
||||
# CONFIG_SKY2 is not set
|
||||
# CONFIG_SK98LIN is not set
|
||||
# CONFIG_VIA_VELOCITY is not set
|
||||
CONFIG_TIGON3=y
|
||||
|
@ -803,6 +751,7 @@ CONFIG_HW_CONSOLE=y
|
|||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
CONFIG_SERIAL_8250_NR_UARTS=4
|
||||
CONFIG_SERIAL_8250_RUNTIME_UARTS=4
|
||||
# CONFIG_SERIAL_8250_EXTENDED is not set
|
||||
|
||||
#
|
||||
|
@ -908,6 +857,12 @@ CONFIG_I2C_ALGOBIT=y
|
|||
# CONFIG_I2C_DEBUG_BUS is not set
|
||||
# CONFIG_I2C_DEBUG_CHIP is not set
|
||||
|
||||
#
|
||||
# SPI support
|
||||
#
|
||||
# CONFIG_SPI is not set
|
||||
# CONFIG_SPI_MASTER is not set
|
||||
|
||||
#
|
||||
# Dallas's 1-wire bus
|
||||
#
|
||||
|
@ -976,7 +931,6 @@ CONFIG_FB_RADEON_I2C=y
|
|||
# CONFIG_FB_KYRO is not set
|
||||
# CONFIG_FB_3DFX is not set
|
||||
# CONFIG_FB_VOODOO1 is not set
|
||||
# CONFIG_FB_CYBLA is not set
|
||||
# CONFIG_FB_TRIDENT is not set
|
||||
# CONFIG_FB_VIRTUAL is not set
|
||||
|
||||
|
@ -1061,12 +1015,15 @@ CONFIG_USB_STORAGE=y
|
|||
# CONFIG_USB_STORAGE_SDDR09 is not set
|
||||
# CONFIG_USB_STORAGE_SDDR55 is not set
|
||||
# CONFIG_USB_STORAGE_JUMPSHOT is not set
|
||||
# CONFIG_USB_STORAGE_ALAUDA is not set
|
||||
# CONFIG_USB_LIBUSUAL is not set
|
||||
|
||||
#
|
||||
# USB Input Devices
|
||||
#
|
||||
CONFIG_USB_HID=y
|
||||
CONFIG_USB_HIDINPUT=y
|
||||
# CONFIG_USB_HIDINPUT_POWERBOOK is not set
|
||||
# CONFIG_HID_FF is not set
|
||||
CONFIG_USB_HIDDEV=y
|
||||
# CONFIG_USB_AIPTEK is not set
|
||||
|
@ -1080,6 +1037,7 @@ CONFIG_USB_HIDDEV=y
|
|||
# CONFIG_USB_YEALINK is not set
|
||||
# CONFIG_USB_XPAD is not set
|
||||
# CONFIG_USB_ATI_REMOTE is not set
|
||||
# CONFIG_USB_ATI_REMOTE2 is not set
|
||||
# CONFIG_USB_KEYSPAN_REMOTE is not set
|
||||
# CONFIG_USB_APPLETOUCH is not set
|
||||
|
||||
|
@ -1166,6 +1124,10 @@ CONFIG_INFINIBAND_IPOIB=m
|
|||
# SN Devices
|
||||
#
|
||||
|
||||
#
|
||||
# EDAC - error detection and reporting (RAS)
|
||||
#
|
||||
|
||||
#
|
||||
# File systems
|
||||
#
|
||||
|
@ -1200,6 +1162,7 @@ CONFIG_XFS_EXPORT=y
|
|||
CONFIG_XFS_SECURITY=y
|
||||
CONFIG_XFS_POSIX_ACL=y
|
||||
# CONFIG_XFS_RT is not set
|
||||
# CONFIG_OCFS2_FS is not set
|
||||
# CONFIG_MINIX_FS is not set
|
||||
# CONFIG_ROMFS_FS is not set
|
||||
CONFIG_INOTIFY=y
|
||||
|
@ -1240,6 +1203,7 @@ CONFIG_HUGETLBFS=y
|
|||
CONFIG_HUGETLB_PAGE=y
|
||||
CONFIG_RAMFS=y
|
||||
# CONFIG_RELAYFS_FS is not set
|
||||
# CONFIG_CONFIGFS_FS is not set
|
||||
|
||||
#
|
||||
# Miscellaneous filesystems
|
||||
|
@ -1351,10 +1315,6 @@ CONFIG_CRC32=y
|
|||
CONFIG_LIBCRC32C=m
|
||||
CONFIG_ZLIB_INFLATE=y
|
||||
CONFIG_ZLIB_DEFLATE=m
|
||||
CONFIG_TEXTSEARCH=y
|
||||
CONFIG_TEXTSEARCH_KMP=m
|
||||
CONFIG_TEXTSEARCH_BM=m
|
||||
CONFIG_TEXTSEARCH_FSM=m
|
||||
|
||||
#
|
||||
# Instrumentation Support
|
||||
|
@ -1367,18 +1327,20 @@ CONFIG_OPROFILE=y
|
|||
# Kernel hacking
|
||||
#
|
||||
# CONFIG_PRINTK_TIME is not set
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_LOG_BUF_SHIFT=17
|
||||
CONFIG_DETECT_SOFTLOCKUP=y
|
||||
# CONFIG_SCHEDSTATS is not set
|
||||
# CONFIG_DEBUG_SLAB is not set
|
||||
CONFIG_DEBUG_MUTEXES=y
|
||||
# CONFIG_DEBUG_SPINLOCK is not set
|
||||
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
||||
# CONFIG_DEBUG_KOBJECT is not set
|
||||
# CONFIG_DEBUG_INFO is not set
|
||||
CONFIG_DEBUG_FS=y
|
||||
# CONFIG_DEBUG_VM is not set
|
||||
CONFIG_FORCED_INLINING=y
|
||||
# CONFIG_RCU_TORTURE_TEST is not set
|
||||
CONFIG_DEBUG_STACKOVERFLOW=y
|
||||
CONFIG_DEBUG_STACK_USAGE=y
|
||||
|
@ -1387,6 +1349,11 @@ CONFIG_XMON=y
|
|||
CONFIG_XMON_DEFAULT=y
|
||||
CONFIG_IRQSTACKS=y
|
||||
# CONFIG_BOOTX_TEXT is not set
|
||||
# CONFIG_PPC_EARLY_DEBUG_LPAR is not set
|
||||
# CONFIG_PPC_EARLY_DEBUG_G5 is not set
|
||||
# CONFIG_PPC_EARLY_DEBUG_RTAS is not set
|
||||
# CONFIG_PPC_EARLY_DEBUG_MAPLE is not set
|
||||
# CONFIG_PPC_EARLY_DEBUG_ISERIES is not set
|
||||
|
||||
#
|
||||
# Security options
|
||||
|
|
|
@ -134,8 +134,10 @@ static void crash_kexec_prepare_cpus(void)
|
|||
* the crash CPU will send an IPI and wait for other CPUs to
|
||||
* respond. If not, proceed the kexec boot even though we failed to
|
||||
* capture other CPU states.
|
||||
* Delay of at least 10 seconds.
|
||||
*/
|
||||
msecs = 1000000;
|
||||
printk(KERN_ALERT "Sending IPI to other cpus...\n");
|
||||
msecs = 10000;
|
||||
while ((atomic_read(&waiting_for_crash_ipi) > 0) && (--msecs > 0)) {
|
||||
barrier();
|
||||
mdelay(1);
|
||||
|
|
|
@ -714,6 +714,7 @@ AltiVecUnavailable:
|
|||
#ifdef CONFIG_ALTIVEC
|
||||
bne load_up_altivec /* if from user, just load it up */
|
||||
#endif /* CONFIG_ALTIVEC */
|
||||
addi r3,r1,STACK_FRAME_OVERHEAD
|
||||
EXC_XFER_EE_LITE(0xf20, altivec_unavailable_exception)
|
||||
|
||||
PerformanceMonitor:
|
||||
|
|
|
@ -139,7 +139,7 @@ _GLOBAL(__secondary_hold)
|
|||
ori r24,r24,MSR_RI
|
||||
mtmsrd r24 /* RI on */
|
||||
|
||||
/* Grab our linux cpu number */
|
||||
/* Grab our physical cpu number */
|
||||
mr r24,r3
|
||||
|
||||
/* Tell the master cpu we're here */
|
||||
|
@ -153,12 +153,7 @@ _GLOBAL(__secondary_hold)
|
|||
cmpdi 0,r4,1
|
||||
bne 100b
|
||||
|
||||
#ifdef CONFIG_HMT
|
||||
SET_REG_IMMEDIATE(r4, .hmt_init)
|
||||
mtctr r4
|
||||
bctr
|
||||
#else
|
||||
#ifdef CONFIG_SMP
|
||||
#if defined(CONFIG_SMP) || defined(CONFIG_KEXEC)
|
||||
LOAD_REG_IMMEDIATE(r4, .pSeries_secondary_smp_init)
|
||||
mtctr r4
|
||||
mr r3,r24
|
||||
|
@ -166,7 +161,6 @@ _GLOBAL(__secondary_hold)
|
|||
#else
|
||||
BUG_OPCODE
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* This value is used to mark exception frames on the stack. */
|
||||
.section ".toc","aw"
|
||||
|
@ -321,7 +315,6 @@ exception_marker:
|
|||
label##_pSeries: \
|
||||
HMT_MEDIUM; \
|
||||
mtspr SPRN_SPRG1,r13; /* save r13 */ \
|
||||
RUNLATCH_ON(r13); \
|
||||
EXCEPTION_PROLOG_PSERIES(PACA_EXGEN, label##_common)
|
||||
|
||||
#define STD_EXCEPTION_ISERIES(n, label, area) \
|
||||
|
@ -329,7 +322,6 @@ label##_pSeries: \
|
|||
label##_iSeries: \
|
||||
HMT_MEDIUM; \
|
||||
mtspr SPRN_SPRG1,r13; /* save r13 */ \
|
||||
RUNLATCH_ON(r13); \
|
||||
EXCEPTION_PROLOG_ISERIES_1(area); \
|
||||
EXCEPTION_PROLOG_ISERIES_2; \
|
||||
b label##_common
|
||||
|
@ -339,7 +331,6 @@ label##_iSeries: \
|
|||
label##_iSeries: \
|
||||
HMT_MEDIUM; \
|
||||
mtspr SPRN_SPRG1,r13; /* save r13 */ \
|
||||
RUNLATCH_ON(r13); \
|
||||
EXCEPTION_PROLOG_ISERIES_1(PACA_EXGEN); \
|
||||
lbz r10,PACAPROCENABLED(r13); \
|
||||
cmpwi 0,r10,0; \
|
||||
|
@ -392,6 +383,7 @@ label##_common: \
|
|||
label##_common: \
|
||||
EXCEPTION_PROLOG_COMMON(trap, PACA_EXGEN); \
|
||||
DISABLE_INTS; \
|
||||
bl .ppc64_runlatch_on; \
|
||||
addi r3,r1,STACK_FRAME_OVERHEAD; \
|
||||
bl hdlr; \
|
||||
b .ret_from_except_lite
|
||||
|
@ -409,7 +401,6 @@ __start_interrupts:
|
|||
_machine_check_pSeries:
|
||||
HMT_MEDIUM
|
||||
mtspr SPRN_SPRG1,r13 /* save r13 */
|
||||
RUNLATCH_ON(r13)
|
||||
EXCEPTION_PROLOG_PSERIES(PACA_EXMC, machine_check_common)
|
||||
|
||||
. = 0x300
|
||||
|
@ -436,7 +427,6 @@ END_FTR_SECTION_IFCLR(CPU_FTR_SLB)
|
|||
data_access_slb_pSeries:
|
||||
HMT_MEDIUM
|
||||
mtspr SPRN_SPRG1,r13
|
||||
RUNLATCH_ON(r13)
|
||||
mfspr r13,SPRN_SPRG3 /* get paca address into r13 */
|
||||
std r3,PACA_EXSLB+EX_R3(r13)
|
||||
mfspr r3,SPRN_DAR
|
||||
|
@ -462,7 +452,6 @@ data_access_slb_pSeries:
|
|||
instruction_access_slb_pSeries:
|
||||
HMT_MEDIUM
|
||||
mtspr SPRN_SPRG1,r13
|
||||
RUNLATCH_ON(r13)
|
||||
mfspr r13,SPRN_SPRG3 /* get paca address into r13 */
|
||||
std r3,PACA_EXSLB+EX_R3(r13)
|
||||
mfspr r3,SPRN_SRR0 /* SRR0 is faulting address */
|
||||
|
@ -493,7 +482,6 @@ instruction_access_slb_pSeries:
|
|||
.globl system_call_pSeries
|
||||
system_call_pSeries:
|
||||
HMT_MEDIUM
|
||||
RUNLATCH_ON(r9)
|
||||
mr r9,r13
|
||||
mfmsr r10
|
||||
mfspr r13,SPRN_SPRG3
|
||||
|
@ -577,7 +565,6 @@ slb_miss_user_pseries:
|
|||
system_reset_fwnmi:
|
||||
HMT_MEDIUM
|
||||
mtspr SPRN_SPRG1,r13 /* save r13 */
|
||||
RUNLATCH_ON(r13)
|
||||
EXCEPTION_PROLOG_PSERIES(PACA_EXGEN, system_reset_common)
|
||||
|
||||
.globl machine_check_fwnmi
|
||||
|
@ -585,7 +572,6 @@ system_reset_fwnmi:
|
|||
machine_check_fwnmi:
|
||||
HMT_MEDIUM
|
||||
mtspr SPRN_SPRG1,r13 /* save r13 */
|
||||
RUNLATCH_ON(r13)
|
||||
EXCEPTION_PROLOG_PSERIES(PACA_EXMC, machine_check_common)
|
||||
|
||||
#ifdef CONFIG_PPC_ISERIES
|
||||
|
@ -896,7 +882,6 @@ unrecov_fer:
|
|||
.align 7
|
||||
.globl data_access_common
|
||||
data_access_common:
|
||||
RUNLATCH_ON(r10) /* It wont fit in the 0x300 handler */
|
||||
mfspr r10,SPRN_DAR
|
||||
std r10,PACA_EXGEN+EX_DAR(r13)
|
||||
mfspr r10,SPRN_DSISR
|
||||
|
@ -1044,6 +1029,7 @@ hardware_interrupt_common:
|
|||
EXCEPTION_PROLOG_COMMON(0x500, PACA_EXGEN)
|
||||
hardware_interrupt_entry:
|
||||
DISABLE_INTS
|
||||
bl .ppc64_runlatch_on
|
||||
addi r3,r1,STACK_FRAME_OVERHEAD
|
||||
bl .do_IRQ
|
||||
b .ret_from_except_lite
|
||||
|
@ -1818,22 +1804,6 @@ _STATIC(start_here_multiplatform)
|
|||
ori r6,r6,MSR_RI
|
||||
mtmsrd r6 /* RI on */
|
||||
|
||||
#ifdef CONFIG_HMT
|
||||
/* Start up the second thread on cpu 0 */
|
||||
mfspr r3,SPRN_PVR
|
||||
srwi r3,r3,16
|
||||
cmpwi r3,0x34 /* Pulsar */
|
||||
beq 90f
|
||||
cmpwi r3,0x36 /* Icestar */
|
||||
beq 90f
|
||||
cmpwi r3,0x37 /* SStar */
|
||||
beq 90f
|
||||
b 91f /* HMT not supported */
|
||||
90: li r3,0
|
||||
bl .hmt_start_secondary
|
||||
91:
|
||||
#endif
|
||||
|
||||
/* The following gets the stack and TOC set up with the regs */
|
||||
/* pointing to the real addr of the kernel stack. This is */
|
||||
/* all done to support the C function call below which sets */
|
||||
|
@ -1947,77 +1917,8 @@ _STATIC(start_here_common)
|
|||
|
||||
bl .start_kernel
|
||||
|
||||
_GLOBAL(hmt_init)
|
||||
#ifdef CONFIG_HMT
|
||||
LOAD_REG_IMMEDIATE(r5, hmt_thread_data)
|
||||
mfspr r7,SPRN_PVR
|
||||
srwi r7,r7,16
|
||||
cmpwi r7,0x34 /* Pulsar */
|
||||
beq 90f
|
||||
cmpwi r7,0x36 /* Icestar */
|
||||
beq 91f
|
||||
cmpwi r7,0x37 /* SStar */
|
||||
beq 91f
|
||||
b 101f
|
||||
90: mfspr r6,SPRN_PIR
|
||||
andi. r6,r6,0x1f
|
||||
b 92f
|
||||
91: mfspr r6,SPRN_PIR
|
||||
andi. r6,r6,0x3ff
|
||||
92: sldi r4,r24,3
|
||||
stwx r6,r5,r4
|
||||
bl .hmt_start_secondary
|
||||
b 101f
|
||||
|
||||
__hmt_secondary_hold:
|
||||
LOAD_REG_IMMEDIATE(r5, hmt_thread_data)
|
||||
clrldi r5,r5,4
|
||||
li r7,0
|
||||
mfspr r6,SPRN_PIR
|
||||
mfspr r8,SPRN_PVR
|
||||
srwi r8,r8,16
|
||||
cmpwi r8,0x34
|
||||
bne 93f
|
||||
andi. r6,r6,0x1f
|
||||
b 103f
|
||||
93: andi. r6,r6,0x3f
|
||||
|
||||
103: lwzx r8,r5,r7
|
||||
cmpw r8,r6
|
||||
beq 104f
|
||||
addi r7,r7,8
|
||||
b 103b
|
||||
|
||||
104: addi r7,r7,4
|
||||
lwzx r9,r5,r7
|
||||
mr r24,r9
|
||||
101:
|
||||
#endif
|
||||
mr r3,r24
|
||||
b .pSeries_secondary_smp_init
|
||||
|
||||
#ifdef CONFIG_HMT
|
||||
_GLOBAL(hmt_start_secondary)
|
||||
LOAD_REG_IMMEDIATE(r4,__hmt_secondary_hold)
|
||||
clrldi r4,r4,4
|
||||
mtspr SPRN_NIADORM, r4
|
||||
mfspr r4, SPRN_MSRDORM
|
||||
li r5, -65
|
||||
and r4, r4, r5
|
||||
mtspr SPRN_MSRDORM, r4
|
||||
lis r4,0xffef
|
||||
ori r4,r4,0x7403
|
||||
mtspr SPRN_TSC, r4
|
||||
li r4,0x1f4
|
||||
mtspr SPRN_TST, r4
|
||||
mfspr r4, SPRN_HID0
|
||||
ori r4, r4, 0x1
|
||||
mtspr SPRN_HID0, r4
|
||||
mfspr r4, SPRN_CTRLF
|
||||
oris r4, r4, 0x40
|
||||
mtspr SPRN_CTRLT, r4
|
||||
blr
|
||||
#endif
|
||||
/* Not reached */
|
||||
BUG_OPCODE
|
||||
|
||||
/*
|
||||
* We put a few things here that have to be page-aligned.
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue