mirror of
https://github.com/torvalds/linux.git
synced 2024-11-06 12:11:59 +00:00
Merge with /pub/scm/linux/kernel/git/torvalds/linux-2.6.git
Signed-off-by: Steve French <sfrench@us.ibm.com>
This commit is contained in:
commit
0ed3f64ec3
234
Documentation/fujitsu/frv/kernel-ABI.txt
Normal file
234
Documentation/fujitsu/frv/kernel-ABI.txt
Normal file
@ -0,0 +1,234 @@
|
||||
=================================
|
||||
INTERNAL KERNEL ABI FOR FR-V ARCH
|
||||
=================================
|
||||
|
||||
The internal FRV kernel ABI is not quite the same as the userspace ABI. A number of the registers
|
||||
are used for special purposed, and the ABI is not consistent between modules vs core, and MMU vs
|
||||
no-MMU.
|
||||
|
||||
This partly stems from the fact that FRV CPUs do not have a separate supervisor stack pointer, and
|
||||
most of them do not have any scratch registers, thus requiring at least one general purpose
|
||||
register to be clobbered in such an event. Also, within the kernel core, it is possible to simply
|
||||
jump or call directly between functions using a relative offset. This cannot be extended to modules
|
||||
for the displacement is likely to be too far. Thus in modules the address of a function to call
|
||||
must be calculated in a register and then used, requiring two extra instructions.
|
||||
|
||||
This document has the following sections:
|
||||
|
||||
(*) System call register ABI
|
||||
(*) CPU operating modes
|
||||
(*) Internal kernel-mode register ABI
|
||||
(*) Internal debug-mode register ABI
|
||||
(*) Virtual interrupt handling
|
||||
|
||||
|
||||
========================
|
||||
SYSTEM CALL REGISTER ABI
|
||||
========================
|
||||
|
||||
When a system call is made, the following registers are effective:
|
||||
|
||||
REGISTERS CALL RETURN
|
||||
=============== ======================= =======================
|
||||
GR7 System call number Preserved
|
||||
GR8 Syscall arg #1 Return value
|
||||
GR9-GR13 Syscall arg #2-6 Preserved
|
||||
|
||||
|
||||
===================
|
||||
CPU OPERATING MODES
|
||||
===================
|
||||
|
||||
The FR-V CPU has three basic operating modes. In order of increasing capability:
|
||||
|
||||
(1) User mode.
|
||||
|
||||
Basic userspace running mode.
|
||||
|
||||
(2) Kernel mode.
|
||||
|
||||
Normal kernel mode. There are many additional control registers available that may be
|
||||
accessed in this mode, in addition to all the stuff available to user mode. This has two
|
||||
submodes:
|
||||
|
||||
(a) Exceptions enabled (PSR.T == 1).
|
||||
|
||||
Exceptions will invoke the appropriate normal kernel mode handler. On entry to the
|
||||
handler, the PSR.T bit will be cleared.
|
||||
|
||||
(b) Exceptions disabled (PSR.T == 0).
|
||||
|
||||
No exceptions or interrupts may happen. Any mandatory exceptions will cause the CPU to
|
||||
halt unless the CPU is told to jump into debug mode instead.
|
||||
|
||||
(3) Debug mode.
|
||||
|
||||
No exceptions may happen in this mode. Memory protection and management exceptions will be
|
||||
flagged for later consideration, but the exception handler won't be invoked. Debugging traps
|
||||
such as hardware breakpoints and watchpoints will be ignored. This mode is entered only by
|
||||
debugging events obtained from the other two modes.
|
||||
|
||||
All kernel mode registers may be accessed, plus a few extra debugging specific registers.
|
||||
|
||||
|
||||
=================================
|
||||
INTERNAL KERNEL-MODE REGISTER ABI
|
||||
=================================
|
||||
|
||||
There are a number of permanent register assignments that are set up by entry.S in the exception
|
||||
prologue. Note that there is a complete set of exception prologues for each of user->kernel
|
||||
transition and kernel->kernel transition. There are also user->debug and kernel->debug mode
|
||||
transition prologues.
|
||||
|
||||
|
||||
REGISTER FLAVOUR USE
|
||||
=============== ======= ====================================================
|
||||
GR1 Supervisor stack pointer
|
||||
GR15 Current thread info pointer
|
||||
GR16 GP-Rel base register for small data
|
||||
GR28 Current exception frame pointer (__frame)
|
||||
GR29 Current task pointer (current)
|
||||
GR30 Destroyed by kernel mode entry
|
||||
GR31 NOMMU Destroyed by debug mode entry
|
||||
GR31 MMU Destroyed by TLB miss kernel mode entry
|
||||
CCR.ICC2 Virtual interrupt disablement tracking
|
||||
CCCR.CC3 Cleared by exception prologue (atomic op emulation)
|
||||
SCR0 MMU See mmu-layout.txt.
|
||||
SCR1 MMU See mmu-layout.txt.
|
||||
SCR2 MMU Save for EAR0 (destroyed by icache insns in debug mode)
|
||||
SCR3 MMU Save for GR31 during debug exceptions
|
||||
DAMR/IAMR NOMMU Fixed memory protection layout.
|
||||
DAMR/IAMR MMU See mmu-layout.txt.
|
||||
|
||||
|
||||
Certain registers are also used or modified across function calls:
|
||||
|
||||
REGISTER CALL RETURN
|
||||
=============== =============================== ===============================
|
||||
GR0 Fixed Zero -
|
||||
GR2 Function call frame pointer
|
||||
GR3 Special Preserved
|
||||
GR3-GR7 - Clobbered
|
||||
GR8 Function call arg #1 Return value (or clobbered)
|
||||
GR9 Function call arg #2 Return value MSW (or clobbered)
|
||||
GR10-GR13 Function call arg #3-#6 Clobbered
|
||||
GR14 - Clobbered
|
||||
GR15-GR16 Special Preserved
|
||||
GR17-GR27 - Preserved
|
||||
GR28-GR31 Special Only accessed explicitly
|
||||
LR Return address after CALL Clobbered
|
||||
CCR/CCCR - Mostly Clobbered
|
||||
|
||||
|
||||
================================
|
||||
INTERNAL DEBUG-MODE REGISTER ABI
|
||||
================================
|
||||
|
||||
This is the same as the kernel-mode register ABI for functions calls. The difference is that in
|
||||
debug-mode there's a different stack and a different exception frame. Almost all the global
|
||||
registers from kernel-mode (including the stack pointer) may be changed.
|
||||
|
||||
REGISTER FLAVOUR USE
|
||||
=============== ======= ====================================================
|
||||
GR1 Debug stack pointer
|
||||
GR16 GP-Rel base register for small data
|
||||
GR31 Current debug exception frame pointer (__debug_frame)
|
||||
SCR3 MMU Saved value of GR31
|
||||
|
||||
|
||||
Note that debug mode is able to interfere with the kernel's emulated atomic ops, so it must be
|
||||
exceedingly careful not to do any that would interact with the main kernel in this regard. Hence
|
||||
the debug mode code (gdbstub) is almost completely self-contained. The only external code used is
|
||||
the sprintf family of functions.
|
||||
|
||||
Futhermore, break.S is so complicated because single-step mode does not switch off on entry to an
|
||||
exception. That means unless manually disabled, single-stepping will blithely go on stepping into
|
||||
things like interrupts. See gdbstub.txt for more information.
|
||||
|
||||
|
||||
==========================
|
||||
VIRTUAL INTERRUPT HANDLING
|
||||
==========================
|
||||
|
||||
Because accesses to the PSR is so slow, and to disable interrupts we have to access it twice (once
|
||||
to read and once to write), we don't actually disable interrupts at all if we don't have to. What
|
||||
we do instead is use the ICC2 condition code flags to note virtual disablement, such that if we
|
||||
then do take an interrupt, we note the flag, really disable interrupts, set another flag and resume
|
||||
execution at the point the interrupt happened. Setting condition flags as a side effect of an
|
||||
arithmetic or logical instruction is really fast. This use of the ICC2 only occurs within the
|
||||
kernel - it does not affect userspace.
|
||||
|
||||
The flags we use are:
|
||||
|
||||
(*) CCR.ICC2.Z [Zero flag]
|
||||
|
||||
Set to virtually disable interrupts, clear when interrupts are virtually enabled. Can be
|
||||
modified by logical instructions without affecting the Carry flag.
|
||||
|
||||
(*) CCR.ICC2.C [Carry flag]
|
||||
|
||||
Clear to indicate hardware interrupts are really disabled, set otherwise.
|
||||
|
||||
|
||||
What happens is this:
|
||||
|
||||
(1) Normal kernel-mode operation.
|
||||
|
||||
ICC2.Z is 0, ICC2.C is 1.
|
||||
|
||||
(2) An interrupt occurs. The exception prologue examines ICC2.Z and determines that nothing needs
|
||||
doing. This is done simply with an unlikely BEQ instruction.
|
||||
|
||||
(3) The interrupts are disabled (local_irq_disable)
|
||||
|
||||
ICC2.Z is set to 1.
|
||||
|
||||
(4) If interrupts were then re-enabled (local_irq_enable):
|
||||
|
||||
ICC2.Z would be set to 0.
|
||||
|
||||
A TIHI #2 instruction (trap #2 if condition HI - Z==0 && C==0) would be used to trap if
|
||||
interrupts were now virtually enabled, but physically disabled - which they're not, so the
|
||||
trap isn't taken. The kernel would then be back to state (1).
|
||||
|
||||
(5) An interrupt occurs. The exception prologue examines ICC2.Z and determines that the interrupt
|
||||
shouldn't actually have happened. It jumps aside, and there disabled interrupts by setting
|
||||
PSR.PIL to 14 and then it clears ICC2.C.
|
||||
|
||||
(6) If interrupts were then saved and disabled again (local_irq_save):
|
||||
|
||||
ICC2.Z would be shifted into the save variable and masked off (giving a 1).
|
||||
|
||||
ICC2.Z would then be set to 1 (thus unchanged), and ICC2.C would be unaffected (ie: 0).
|
||||
|
||||
(7) If interrupts were then restored from state (6) (local_irq_restore):
|
||||
|
||||
ICC2.Z would be set to indicate the result of XOR'ing the saved value (ie: 1) with 1, which
|
||||
gives a result of 0 - thus leaving ICC2.Z set.
|
||||
|
||||
ICC2.C would remain unaffected (ie: 0).
|
||||
|
||||
A TIHI #2 instruction would be used to again assay the current state, but this would do
|
||||
nothing as Z==1.
|
||||
|
||||
(8) If interrupts were then enabled (local_irq_enable):
|
||||
|
||||
ICC2.Z would be cleared. ICC2.C would be left unaffected. Both flags would now be 0.
|
||||
|
||||
A TIHI #2 instruction again issued to assay the current state would then trap as both Z==0
|
||||
[interrupts virtually enabled] and C==0 [interrupts really disabled] would then be true.
|
||||
|
||||
(9) The trap #2 handler would simply enable hardware interrupts (set PSR.PIL to 0), set ICC2.C to
|
||||
1 and return.
|
||||
|
||||
(10) Immediately upon returning, the pending interrupt would be taken.
|
||||
|
||||
(11) The interrupt handler would take the path of actually processing the interrupt (ICC2.Z is
|
||||
clear, BEQ fails as per step (2)).
|
||||
|
||||
(12) The interrupt handler would then set ICC2.C to 1 since hardware interrupts are definitely
|
||||
enabled - or else the kernel wouldn't be here.
|
||||
|
||||
(13) On return from the interrupt handler, things would be back to state (1).
|
||||
|
||||
This trap (#2) is only available in kernel mode. In user mode it will result in SIGILL.
|
@ -36,6 +36,10 @@ Module Parameters
|
||||
(default is 1)
|
||||
Use 'init=0' to bypass initializing the chip.
|
||||
Try this if your computer crashes when you load the module.
|
||||
* reset: int
|
||||
(default is 0)
|
||||
The driver used to reset the chip on load, but does no more. Use
|
||||
'reset=1' to restore the old behavior. Report if you need to do this.
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
@ -136,17 +136,20 @@ Kprobes, jprobes, and return probes are implemented on the following
|
||||
architectures:
|
||||
|
||||
- i386
|
||||
- x86_64 (AMD-64, E64MT)
|
||||
- x86_64 (AMD-64, EM64T)
|
||||
- ppc64
|
||||
- ia64 (Support for probes on certain instruction types is still in progress.)
|
||||
- ia64 (Does not support probes on instruction slot1.)
|
||||
- sparc64 (Return probes not yet implemented.)
|
||||
|
||||
3. Configuring Kprobes
|
||||
|
||||
When configuring the kernel using make menuconfig/xconfig/oldconfig,
|
||||
ensure that CONFIG_KPROBES is set to "y". Under "Kernel hacking",
|
||||
look for "Kprobes". You may have to enable "Kernel debugging"
|
||||
(CONFIG_DEBUG_KERNEL) before you can enable Kprobes.
|
||||
ensure that CONFIG_KPROBES is set to "y". Under "Instrumentation
|
||||
Support", look for "Kprobes".
|
||||
|
||||
So that you can load and unload Kprobes-based instrumentation modules,
|
||||
make sure "Loadable module support" (CONFIG_MODULES) and "Module
|
||||
unloading" (CONFIG_MODULE_UNLOAD) are set to "y".
|
||||
|
||||
You may also want to ensure that CONFIG_KALLSYMS and perhaps even
|
||||
CONFIG_KALLSYMS_ALL are set to "y", since kallsyms_lookup_name()
|
||||
@ -262,18 +265,18 @@ at any time after the probe has been registered.
|
||||
|
||||
5. Kprobes Features and Limitations
|
||||
|
||||
As of Linux v2.6.12, Kprobes allows multiple probes at the same
|
||||
address. Currently, however, there cannot be multiple jprobes on
|
||||
the same function at the same time.
|
||||
Kprobes allows multiple probes at the same address. Currently,
|
||||
however, there cannot be multiple jprobes on the same function at
|
||||
the same time.
|
||||
|
||||
In general, you can install a probe anywhere in the kernel.
|
||||
In particular, you can probe interrupt handlers. Known exceptions
|
||||
are discussed in this section.
|
||||
|
||||
For obvious reasons, it's a bad idea to install a probe in
|
||||
the code that implements Kprobes (mostly kernel/kprobes.c and
|
||||
arch/*/kernel/kprobes.c). A patch in the v2.6.13 timeframe instructs
|
||||
Kprobes to reject such requests.
|
||||
The register_*probe functions will return -EINVAL if you attempt
|
||||
to install a probe in the code that implements Kprobes (mostly
|
||||
kernel/kprobes.c and arch/*/kernel/kprobes.c, but also functions such
|
||||
as do_page_fault and notifier_call_chain).
|
||||
|
||||
If you install a probe in an inline-able function, Kprobes makes
|
||||
no attempt to chase down all inline instances of the function and
|
||||
@ -290,18 +293,14 @@ from the accidental ones. Don't drink and probe.
|
||||
|
||||
Kprobes makes no attempt to prevent probe handlers from stepping on
|
||||
each other -- e.g., probing printk() and then calling printk() from a
|
||||
probe handler. As of Linux v2.6.12, if a probe handler hits a probe,
|
||||
that second probe's handlers won't be run in that instance.
|
||||
probe handler. If a probe handler hits a probe, that second probe's
|
||||
handlers won't be run in that instance, and the kprobe.nmissed member
|
||||
of the second probe will be incremented.
|
||||
|
||||
In Linux v2.6.12 and previous versions, Kprobes' data structures are
|
||||
protected by a single lock that is held during probe registration and
|
||||
unregistration and while handlers are run. Thus, no two handlers
|
||||
can run simultaneously. To improve scalability on SMP systems,
|
||||
this restriction will probably be removed soon, in which case
|
||||
multiple handlers (or multiple instances of the same handler) may
|
||||
run concurrently on different CPUs. Code your handlers accordingly.
|
||||
As of Linux v2.6.15-rc1, multiple handlers (or multiple instances of
|
||||
the same handler) may run concurrently on different CPUs.
|
||||
|
||||
Kprobes does not use semaphores or allocate memory except during
|
||||
Kprobes does not use mutexes or allocate memory except during
|
||||
registration and unregistration.
|
||||
|
||||
Probe handlers are run with preemption disabled. Depending on the
|
||||
@ -316,11 +315,18 @@ address instead of the real return address for kretprobed functions.
|
||||
(As far as we can tell, __builtin_return_address() is used only
|
||||
for instrumentation and error reporting.)
|
||||
|
||||
If the number of times a function is called does not match the
|
||||
number of times it returns, registering a return probe on that
|
||||
function may produce undesirable results. We have the do_exit()
|
||||
and do_execve() cases covered. do_fork() is not an issue. We're
|
||||
unaware of other specific cases where this could be a problem.
|
||||
If the number of times a function is called does not match the number
|
||||
of times it returns, registering a return probe on that function may
|
||||
produce undesirable results. We have the do_exit() case covered.
|
||||
do_execve() and do_fork() are not an issue. We're unaware of other
|
||||
specific cases where this could be a problem.
|
||||
|
||||
If, upon entry to or exit from a function, the CPU is running on
|
||||
a stack other than that of the current task, registering a return
|
||||
probe on that function may produce undesirable results. For this
|
||||
reason, Kprobes doesn't support return probes (or kprobes or jprobes)
|
||||
on the x86_64 version of __switch_to(); the registration functions
|
||||
return -EINVAL.
|
||||
|
||||
6. Probe Overhead
|
||||
|
||||
@ -347,14 +353,12 @@ k = 0.77 usec; j = 1.31; r = 1.26; kr = 1.45; jr = 1.99
|
||||
|
||||
7. TODO
|
||||
|
||||
a. SystemTap (http://sourceware.org/systemtap): Work in progress
|
||||
to provide a simplified programming interface for probe-based
|
||||
instrumentation.
|
||||
b. Improved SMP scalability: Currently, work is in progress to handle
|
||||
multiple kprobes in parallel.
|
||||
c. Kernel return probes for sparc64.
|
||||
d. Support for other architectures.
|
||||
e. User-space probes.
|
||||
a. SystemTap (http://sourceware.org/systemtap): Provides a simplified
|
||||
programming interface for probe-based instrumentation. Try it out.
|
||||
b. Kernel return probes for sparc64.
|
||||
c. Support for other architectures.
|
||||
d. User-space probes.
|
||||
e. Watchpoint probes (which fire on data references).
|
||||
|
||||
8. Kprobes Example
|
||||
|
||||
@ -411,8 +415,7 @@ int init_module(void)
|
||||
printk("Couldn't find %s to plant kprobe\n", "do_fork");
|
||||
return -1;
|
||||
}
|
||||
ret = register_kprobe(&kp);
|
||||
if (ret < 0) {
|
||||
if ((ret = register_kprobe(&kp) < 0)) {
|
||||
printk("register_kprobe failed, returned %d\n", ret);
|
||||
return -1;
|
||||
}
|
||||
|
@ -95,11 +95,13 @@ CONFIG_BLK_DEV_IDEDMA_PCI=y
|
||||
CONFIG_IDEDMA_PCI_AUTO=y
|
||||
CONFIG_BLK_DEV_IDE_AU1XXX=y
|
||||
CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA=y
|
||||
CONFIG_BLK_DEV_IDE_AU1XXX_BURSTABLE_ON=y
|
||||
CONFIG_BLK_DEV_IDE_AU1XXX_SEQTS_PER_RQ=128
|
||||
CONFIG_BLK_DEV_IDEDMA=y
|
||||
CONFIG_IDEDMA_AUTO=y
|
||||
|
||||
Also define 'IDE_AU1XXX_BURSTMODE' in 'drivers/ide/mips/au1xxx-ide.c' to enable
|
||||
the burst support on DBDMA controller.
|
||||
|
||||
If the used system need the USB support enable the following kernel configs for
|
||||
high IDE to USB throughput.
|
||||
|
||||
@ -115,6 +117,8 @@ CONFIG_BLK_DEV_IDE_AU1XXX_SEQTS_PER_RQ=128
|
||||
CONFIG_BLK_DEV_IDEDMA=y
|
||||
CONFIG_IDEDMA_AUTO=y
|
||||
|
||||
Also undefine 'IDE_AU1XXX_BURSTMODE' in 'drivers/ide/mips/au1xxx-ide.c' to
|
||||
disable the burst support on DBDMA controller.
|
||||
|
||||
ADD NEW HARD DISC TO WHITE OR BLACK LIST
|
||||
----------------------------------------
|
||||
|
@ -44,7 +44,6 @@
|
||||
compiler and the textural representation of
|
||||
the tree that can be "compiled" by dtc.
|
||||
|
||||
|
||||
November 21, 2005: Rev 0.5
|
||||
- Additions/generalizations for 32-bit
|
||||
- Changed to reflect the new arch/powerpc
|
||||
@ -1307,6 +1306,65 @@ platforms are moved over to use the flattened-device-tree model.
|
||||
};
|
||||
|
||||
|
||||
f) Freescale SOC USB controllers
|
||||
|
||||
The device node for a USB controller that is part of a Freescale
|
||||
SOC is as described in the document "Open Firmware Recommended
|
||||
Practice : Universal Serial Bus" with the following modifications
|
||||
and additions :
|
||||
|
||||
Required properties :
|
||||
- compatible : Should be "fsl-usb2-mph" for multi port host usb
|
||||
controllers, or "fsl-usb2-dr" for dual role usb controllers
|
||||
- phy_type : For multi port host usb controllers, should be one of
|
||||
"ulpi", or "serial". For dual role usb controllers, should be
|
||||
one of "ulpi", "utmi", "utmi_wide", or "serial".
|
||||
- reg : Offset and length of the register set for the device
|
||||
- port0 : boolean; if defined, indicates port0 is connected for
|
||||
fsl-usb2-mph compatible controllers. Either this property or
|
||||
"port1" (or both) must be defined for "fsl-usb2-mph" compatible
|
||||
controllers.
|
||||
- port1 : boolean; if defined, indicates port1 is connected for
|
||||
fsl-usb2-mph compatible controllers. Either this property or
|
||||
"port0" (or both) must be defined for "fsl-usb2-mph" compatible
|
||||
controllers.
|
||||
|
||||
Recommended properties :
|
||||
- interrupts : <a b> where a is the interrupt number and b is a
|
||||
field that represents an encoding of the sense and level
|
||||
information for the interrupt. This should be encoded based on
|
||||
the information in section 2) depending on the type of interrupt
|
||||
controller you have.
|
||||
- interrupt-parent : the phandle for the interrupt controller that
|
||||
services interrupts for this device.
|
||||
|
||||
Example multi port host usb controller device node :
|
||||
usb@22000 {
|
||||
device_type = "usb";
|
||||
compatible = "fsl-usb2-mph";
|
||||
reg = <22000 1000>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
interrupt-parent = <700>;
|
||||
interrupts = <27 1>;
|
||||
phy_type = "ulpi";
|
||||
port0;
|
||||
port1;
|
||||
};
|
||||
|
||||
Example dual role usb controller device node :
|
||||
usb@23000 {
|
||||
device_type = "usb";
|
||||
compatible = "fsl-usb2-dr";
|
||||
reg = <23000 1000>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
interrupt-parent = <700>;
|
||||
interrupts = <26 1>;
|
||||
phy = "ulpi";
|
||||
};
|
||||
|
||||
|
||||
More devices will be defined as this spec matures.
|
||||
|
||||
|
||||
|
18
MAINTAINERS
18
MAINTAINERS
@ -2232,7 +2232,23 @@ P: Martin Schwidefsky
|
||||
M: schwidefsky@de.ibm.com
|
||||
M: linux390@de.ibm.com
|
||||
L: linux-390@vm.marist.edu
|
||||
W: http://oss.software.ibm.com/developerworks/opensource/linux390
|
||||
W: http://www.ibm.com/developerworks/linux/linux390/
|
||||
S: Supported
|
||||
|
||||
S390 NETWORK DRIVERS
|
||||
P: Frank Pavlic
|
||||
M: fpavlic@de.ibm.com
|
||||
M: linux390@de.ibm.com
|
||||
L: linux-390@vm.marist.edu
|
||||
W: http://www.ibm.com/developerworks/linux/linux390/
|
||||
S: Supported
|
||||
|
||||
S390 ZFCP DRIVER
|
||||
P: Andreas Herrmann
|
||||
M: aherrman@de.ibm.com
|
||||
M: linux390@de.ibm.com
|
||||
L: linux-390@vm.marist.edu
|
||||
W: http://www.ibm.com/developerworks/linux/linux390/
|
||||
S: Supported
|
||||
|
||||
SAA7146 VIDEO4LINUX-2 DRIVER
|
||||
|
2
Makefile
2
Makefile
@ -1,7 +1,7 @@
|
||||
VERSION = 2
|
||||
PATCHLEVEL = 6
|
||||
SUBLEVEL = 16
|
||||
EXTRAVERSION =-rc2
|
||||
EXTRAVERSION =-rc3
|
||||
NAME=Sliding Snow Leopard
|
||||
|
||||
# *DOCUMENTATION*
|
||||
|
@ -46,10 +46,11 @@
|
||||
#include <asm/irq.h>
|
||||
#include <asm/mach-types.h>
|
||||
|
||||
//#include <asm/debug-ll.h>
|
||||
|
||||
#include <asm/arch/regs-serial.h>
|
||||
#include <asm/arch/regs-lcd.h>
|
||||
|
||||
#include <asm/arch/h1940-latch.h>
|
||||
#include <asm/arch/fb.h>
|
||||
|
||||
#include <linux/serial_core.h>
|
||||
@ -59,7 +60,12 @@
|
||||
#include "cpu.h"
|
||||
|
||||
static struct map_desc h1940_iodesc[] __initdata = {
|
||||
/* nothing here yet */
|
||||
[0] = {
|
||||
.virtual = (unsigned long)H1940_LATCH,
|
||||
.pfn = __phys_to_pfn(H1940_PA_LATCH),
|
||||
.length = SZ_16K,
|
||||
.type = MT_DEVICE
|
||||
},
|
||||
};
|
||||
|
||||
#define UCON S3C2410_UCON_DEFAULT | S3C2410_UCON_UCLK
|
||||
@ -92,6 +98,25 @@ static struct s3c2410_uartcfg h1940_uartcfgs[] = {
|
||||
}
|
||||
};
|
||||
|
||||
/* Board control latch control */
|
||||
|
||||
static unsigned int latch_state = H1940_LATCH_DEFAULT;
|
||||
|
||||
void h1940_latch_control(unsigned int clear, unsigned int set)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
local_irq_save(flags);
|
||||
|
||||
latch_state &= ~clear;
|
||||
latch_state |= set;
|
||||
|
||||
__raw_writel(latch_state, H1940_LATCH);
|
||||
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL_GPL(h1940_latch_control);
|
||||
|
||||
|
||||
/**
|
||||
|
31
arch/arm/mach-s3c2410/s3c2400.h
Normal file
31
arch/arm/mach-s3c2410/s3c2400.h
Normal file
@ -0,0 +1,31 @@
|
||||
/* arch/arm/mach-s3c2410/s3c2400.h
|
||||
*
|
||||
* Copyright (c) 2004 Simtec Electronics
|
||||
* Ben Dooks <ben@simtec.co.uk>
|
||||
*
|
||||
* Header file for S3C2400 cpu support
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* Modifications:
|
||||
* 09-Fev-2006 LCVR First version, based on s3c2410.h
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_CPU_S3C2400
|
||||
|
||||
extern int s3c2400_init(void);
|
||||
|
||||
extern void s3c2400_map_io(struct map_desc *mach_desc, int size);
|
||||
|
||||
extern void s3c2400_init_uarts(struct s3c2410_uartcfg *cfg, int no);
|
||||
|
||||
extern void s3c2400_init_clocks(int xtal);
|
||||
|
||||
#else
|
||||
#define s3c2400_init_clocks NULL
|
||||
#define s3c2400_init_uarts NULL
|
||||
#define s3c2400_map_io NULL
|
||||
#define s3c2400_init NULL
|
||||
#endif
|
@ -25,6 +25,10 @@ config GENERIC_HARDIRQS
|
||||
bool
|
||||
default n
|
||||
|
||||
config TIME_LOW_RES
|
||||
bool
|
||||
default y
|
||||
|
||||
mainmenu "Fujitsu FR-V Kernel Configuration"
|
||||
|
||||
source "init/Kconfig"
|
||||
|
@ -81,7 +81,7 @@ endif
|
||||
# - reserve CC3 for use with atomic ops
|
||||
# - all the extra registers are dealt with only at context switch time
|
||||
CFLAGS += -mno-fdpic -mgpr-32 -msoft-float -mno-media
|
||||
CFLAGS += -ffixed-fcc3 -ffixed-cc3 -ffixed-gr15
|
||||
CFLAGS += -ffixed-fcc3 -ffixed-cc3 -ffixed-gr15 -ffixed-icc2
|
||||
AFLAGS += -mno-fdpic
|
||||
ASFLAGS += -mno-fdpic
|
||||
|
||||
|
@ -200,12 +200,20 @@ __break_step:
|
||||
movsg bpcsr,gr2
|
||||
sethi.p %hi(__entry_kernel_external_interrupt),gr3
|
||||
setlo %lo(__entry_kernel_external_interrupt),gr3
|
||||
subcc gr2,gr3,gr0,icc0
|
||||
subcc.p gr2,gr3,gr0,icc0
|
||||
sethi %hi(__entry_uspace_external_interrupt),gr3
|
||||
setlo.p %lo(__entry_uspace_external_interrupt),gr3
|
||||
beq icc0,#2,__break_step_kernel_external_interrupt
|
||||
sethi.p %hi(__entry_uspace_external_interrupt),gr3
|
||||
setlo %lo(__entry_uspace_external_interrupt),gr3
|
||||
subcc gr2,gr3,gr0,icc0
|
||||
subcc.p gr2,gr3,gr0,icc0
|
||||
sethi %hi(__entry_kernel_external_interrupt_virtually_disabled),gr3
|
||||
setlo.p %lo(__entry_kernel_external_interrupt_virtually_disabled),gr3
|
||||
beq icc0,#2,__break_step_uspace_external_interrupt
|
||||
subcc.p gr2,gr3,gr0,icc0
|
||||
sethi %hi(__entry_kernel_external_interrupt_virtual_reenable),gr3
|
||||
setlo.p %lo(__entry_kernel_external_interrupt_virtual_reenable),gr3
|
||||
beq icc0,#2,__break_step_kernel_external_interrupt_virtually_disabled
|
||||
subcc gr2,gr3,gr0,icc0
|
||||
beq icc0,#2,__break_step_kernel_external_interrupt_virtual_reenable
|
||||
|
||||
LEDS 0x2007,gr2
|
||||
|
||||
@ -254,6 +262,9 @@ __break_step_kernel_softprog_interrupt:
|
||||
# step through an external interrupt from kernel mode
|
||||
.globl __break_step_kernel_external_interrupt
|
||||
__break_step_kernel_external_interrupt:
|
||||
# deal with virtual interrupt disablement
|
||||
beq icc2,#0,__break_step_kernel_external_interrupt_virtually_disabled
|
||||
|
||||
sethi.p %hi(__entry_kernel_external_interrupt_reentry),gr3
|
||||
setlo %lo(__entry_kernel_external_interrupt_reentry),gr3
|
||||
|
||||
@ -294,6 +305,64 @@ __break_return_as_kernel_prologue:
|
||||
#endif
|
||||
rett #1
|
||||
|
||||
# we single-stepped into an interrupt handler whilst interrupts were merely virtually disabled
|
||||
# need to really disable interrupts, set flag, fix up and return
|
||||
__break_step_kernel_external_interrupt_virtually_disabled:
|
||||
movsg psr,gr2
|
||||
andi gr2,#~PSR_PIL,gr2
|
||||
ori gr2,#PSR_PIL_14,gr2 /* debugging interrupts only */
|
||||
movgs gr2,psr
|
||||
|
||||
ldi @(gr31,#REG_CCR),gr3
|
||||
movgs gr3,ccr
|
||||
subcc.p gr0,gr0,gr0,icc2 /* leave Z set, clear C */
|
||||
|
||||
# exceptions must've been enabled and we must've been in supervisor mode
|
||||
setlos BPSR_BET|BPSR_BS,gr3
|
||||
movgs gr3,bpsr
|
||||
|
||||
# return to where the interrupt happened
|
||||
movsg pcsr,gr2
|
||||
movgs gr2,bpcsr
|
||||
|
||||
lddi.p @(gr31,#REG_GR(2)),gr2
|
||||
|
||||
xor gr31,gr31,gr31
|
||||
movgs gr0,brr
|
||||
#ifdef CONFIG_MMU
|
||||
movsg scr3,gr31
|
||||
#endif
|
||||
rett #1
|
||||
|
||||
# we stepped through into the virtual interrupt reenablement trap
|
||||
#
|
||||
# we also want to single step anyway, but after fixing up so that we get an event on the
|
||||
# instruction after the broken-into exception returns
|
||||
.globl __break_step_kernel_external_interrupt_virtual_reenable
|
||||
__break_step_kernel_external_interrupt_virtual_reenable:
|
||||
movsg psr,gr2
|
||||
andi gr2,#~PSR_PIL,gr2
|
||||
movgs gr2,psr
|
||||
|
||||
ldi @(gr31,#REG_CCR),gr3
|
||||
movgs gr3,ccr
|
||||
subicc gr0,#1,gr0,icc2 /* clear Z, set C */
|
||||
|
||||
# save the adjusted ICC2
|
||||
movsg ccr,gr3
|
||||
sti gr3,@(gr31,#REG_CCR)
|
||||
|
||||
# exceptions must've been enabled and we must've been in supervisor mode
|
||||
setlos BPSR_BET|BPSR_BS,gr3
|
||||
movgs gr3,bpsr
|
||||
|
||||
# return to where the trap happened
|
||||
movsg pcsr,gr2
|
||||
movgs gr2,bpcsr
|
||||
|
||||
# and then process the single step
|
||||
bra __break_continue
|
||||
|
||||
# step through an internal exception from uspace mode
|
||||
.globl __break_step_uspace_softprog_interrupt
|
||||
__break_step_uspace_softprog_interrupt:
|
||||
|
@ -116,6 +116,8 @@ __break_kerneltrap_fixup_table:
|
||||
.long __break_step_uspace_external_interrupt
|
||||
.section .trap.kernel
|
||||
.org \tbr_tt
|
||||
# deal with virtual interrupt disablement
|
||||
beq icc2,#0,__entry_kernel_external_interrupt_virtually_disabled
|
||||
bra __entry_kernel_external_interrupt
|
||||
.section .trap.fixup.kernel
|
||||
.org \tbr_tt >> 2
|
||||
@ -259,25 +261,52 @@ __trap_fixup_kernel_data_tlb_miss:
|
||||
.org TBR_TT_TRAP0
|
||||
.rept 127
|
||||
bra __entry_uspace_softprog_interrupt
|
||||
bra __break_step_uspace_softprog_interrupt
|
||||
.long 0,0
|
||||
.long 0,0,0
|
||||
.endr
|
||||
.org TBR_TT_BREAK
|
||||
bra __entry_break
|
||||
.long 0,0,0
|
||||
|
||||
.section .trap.fixup.user
|
||||
.org TBR_TT_TRAP0 >> 2
|
||||
.rept 127
|
||||
.long __break_step_uspace_softprog_interrupt
|
||||
.endr
|
||||
.org TBR_TT_BREAK >> 2
|
||||
.long 0
|
||||
|
||||
# miscellaneous kernel mode entry points
|
||||
.section .trap.kernel
|
||||
.org TBR_TT_TRAP0
|
||||
.rept 127
|
||||
bra __entry_kernel_softprog_interrupt
|
||||
bra __break_step_kernel_softprog_interrupt
|
||||
.long 0,0
|
||||
.org TBR_TT_TRAP1
|
||||
bra __entry_kernel_softprog_interrupt
|
||||
|
||||
# trap #2 in kernel - reenable interrupts
|
||||
.org TBR_TT_TRAP2
|
||||
bra __entry_kernel_external_interrupt_virtual_reenable
|
||||
|
||||
# miscellaneous kernel traps
|
||||
.org TBR_TT_TRAP3
|
||||
.rept 124
|
||||
bra __entry_kernel_softprog_interrupt
|
||||
.long 0,0,0
|
||||
.endr
|
||||
.org TBR_TT_BREAK
|
||||
bra __entry_break
|
||||
.long 0,0,0
|
||||
|
||||
.section .trap.fixup.kernel
|
||||
.org TBR_TT_TRAP0 >> 2
|
||||
.long __break_step_kernel_softprog_interrupt
|
||||
.long __break_step_kernel_softprog_interrupt
|
||||
.long __break_step_kernel_external_interrupt_virtual_reenable
|
||||
.rept 124
|
||||
.long __break_step_kernel_softprog_interrupt
|
||||
.endr
|
||||
.org TBR_TT_BREAK >> 2
|
||||
.long 0
|
||||
|
||||
# miscellaneous debug mode entry points
|
||||
.section .trap.break
|
||||
.org TBR_TT_BREAK
|
||||
|
@ -141,7 +141,10 @@ __entry_uspace_external_interrupt_reentry:
|
||||
|
||||
movsg gner0,gr4
|
||||
movsg gner1,gr5
|
||||
stdi gr4,@(gr28,#REG_GNER0)
|
||||
stdi.p gr4,@(gr28,#REG_GNER0)
|
||||
|
||||
# interrupts start off fully disabled in the interrupt handler
|
||||
subcc gr0,gr0,gr0,icc2 /* set Z and clear C */
|
||||
|
||||
# set up kernel global registers
|
||||
sethi.p %hi(__kernel_current_task),gr5
|
||||
@ -193,9 +196,8 @@ __entry_uspace_external_interrupt_reentry:
|
||||
.type __entry_kernel_external_interrupt,@function
|
||||
__entry_kernel_external_interrupt:
|
||||
LEDS 0x6210
|
||||
|
||||
sub sp,gr15,gr31
|
||||
LEDS32
|
||||
// sub sp,gr15,gr31
|
||||
// LEDS32
|
||||
|
||||
# set up the stack pointer
|
||||
or.p sp,gr0,gr30
|
||||
@ -231,7 +233,10 @@ __entry_kernel_external_interrupt_reentry:
|
||||
stdi gr24,@(gr28,#REG_GR(24))
|
||||
stdi gr26,@(gr28,#REG_GR(26))
|
||||
sti gr29,@(gr28,#REG_GR(29))
|
||||
stdi gr30,@(gr28,#REG_GR(30))
|
||||
stdi.p gr30,@(gr28,#REG_GR(30))
|
||||
|
||||
# note virtual interrupts will be fully enabled upon return
|
||||
subicc gr0,#1,gr0,icc2 /* clear Z, set C */
|
||||
|
||||
movsg tbr ,gr20
|
||||
movsg psr ,gr22
|
||||
@ -267,7 +272,10 @@ __entry_kernel_external_interrupt_reentry:
|
||||
|
||||
movsg gner0,gr4
|
||||
movsg gner1,gr5
|
||||
stdi gr4,@(gr28,#REG_GNER0)
|
||||
stdi.p gr4,@(gr28,#REG_GNER0)
|
||||
|
||||
# interrupts start off fully disabled in the interrupt handler
|
||||
subcc gr0,gr0,gr0,icc2 /* set Z and clear C */
|
||||
|
||||
# set the return address
|
||||
sethi.p %hi(__entry_return_from_kernel_interrupt),gr4
|
||||
@ -291,6 +299,45 @@ __entry_kernel_external_interrupt_reentry:
|
||||
|
||||
.size __entry_kernel_external_interrupt,.-__entry_kernel_external_interrupt
|
||||
|
||||
###############################################################################
|
||||
#
|
||||
# deal with interrupts that were actually virtually disabled
|
||||
# - we need to really disable them, flag the fact and return immediately
|
||||
# - if you change this, you must alter break.S also
|
||||
#
|
||||
###############################################################################
|
||||
.balign L1_CACHE_BYTES
|
||||
.globl __entry_kernel_external_interrupt_virtually_disabled
|
||||
.type __entry_kernel_external_interrupt_virtually_disabled,@function
|
||||
__entry_kernel_external_interrupt_virtually_disabled:
|
||||
movsg psr,gr30
|
||||
andi gr30,#~PSR_PIL,gr30
|
||||
ori gr30,#PSR_PIL_14,gr30 ; debugging interrupts only
|
||||
movgs gr30,psr
|
||||
subcc gr0,gr0,gr0,icc2 ; leave Z set, clear C
|
||||
rett #0
|
||||
|
||||
.size __entry_kernel_external_interrupt_virtually_disabled,.-__entry_kernel_external_interrupt_virtually_disabled
|
||||
|
||||
###############################################################################
|
||||
#
|
||||
# deal with re-enablement of interrupts that were pending when virtually re-enabled
|
||||
# - set ICC2.C, re-enable the real interrupts and return
|
||||
# - we can clear ICC2.Z because we shouldn't be here if it's not 0 [due to TIHI]
|
||||
# - if you change this, you must alter break.S also
|
||||
#
|
||||
###############################################################################
|
||||
.balign L1_CACHE_BYTES
|
||||
.globl __entry_kernel_external_interrupt_virtual_reenable
|
||||
.type __entry_kernel_external_interrupt_virtual_reenable,@function
|
||||
__entry_kernel_external_interrupt_virtual_reenable:
|
||||
movsg psr,gr30
|
||||
andi gr30,#~PSR_PIL,gr30 ; re-enable interrupts
|
||||
movgs gr30,psr
|
||||
subicc gr0,#1,gr0,icc2 ; clear Z, set C
|
||||
rett #0
|
||||
|
||||
.size __entry_kernel_external_interrupt_virtual_reenable,.-__entry_kernel_external_interrupt_virtual_reenable
|
||||
|
||||
###############################################################################
|
||||
#
|
||||
@ -335,6 +382,7 @@ __entry_uspace_softprog_interrupt_reentry:
|
||||
|
||||
sethi.p %hi(__entry_return_from_user_exception),gr23
|
||||
setlo %lo(__entry_return_from_user_exception),gr23
|
||||
|
||||
bra __entry_common
|
||||
|
||||
.size __entry_uspace_softprog_interrupt,.-__entry_uspace_softprog_interrupt
|
||||
@ -495,7 +543,10 @@ __entry_common:
|
||||
|
||||
movsg gner0,gr4
|
||||
movsg gner1,gr5
|
||||
stdi gr4,@(gr28,#REG_GNER0)
|
||||
stdi.p gr4,@(gr28,#REG_GNER0)
|
||||
|
||||
# set up virtual interrupt disablement
|
||||
subicc gr0,#1,gr0,icc2 /* clear Z flag, set C flag */
|
||||
|
||||
# set up kernel global registers
|
||||
sethi.p %hi(__kernel_current_task),gr5
|
||||
@ -1418,11 +1469,27 @@ sys_call_table:
|
||||
.long sys_add_key
|
||||
.long sys_request_key
|
||||
.long sys_keyctl
|
||||
.long sys_ni_syscall // sys_vperfctr_open
|
||||
.long sys_ni_syscall // sys_vperfctr_control /* 290 */
|
||||
.long sys_ni_syscall // sys_vperfctr_unlink
|
||||
.long sys_ni_syscall // sys_vperfctr_iresume
|
||||
.long sys_ni_syscall // sys_vperfctr_read
|
||||
.long sys_ioprio_set
|
||||
.long sys_ioprio_get /* 290 */
|
||||
.long sys_inotify_init
|
||||
.long sys_inotify_add_watch
|
||||
.long sys_inotify_rm_watch
|
||||
.long sys_migrate_pages
|
||||
.long sys_openat /* 295 */
|
||||
.long sys_mkdirat
|
||||
.long sys_mknodat
|
||||
.long sys_fchownat
|
||||
.long sys_futimesat
|
||||
.long sys_newfstatat /* 300 */
|
||||
.long sys_unlinkat
|
||||
.long sys_renameat
|
||||
.long sys_linkat
|
||||
.long sys_symlinkat
|
||||
.long sys_readlinkat /* 305 */
|
||||
.long sys_fchmodat
|
||||
.long sys_faccessat
|
||||
.long sys_pselect6
|
||||
.long sys_ppoll
|
||||
|
||||
|
||||
syscall_table_size = (. - sys_call_table)
|
||||
|
@ -513,6 +513,9 @@ __head_mmu_enabled:
|
||||
movgs gr0,ccr
|
||||
movgs gr0,cccr
|
||||
|
||||
# initialise the virtual interrupt handling
|
||||
subcc gr0,gr0,gr0,icc2 /* set Z, clear C */
|
||||
|
||||
#ifdef CONFIG_MMU
|
||||
movgs gr3,scr2
|
||||
movgs gr3,scr3
|
||||
|
@ -287,18 +287,11 @@ asmlinkage void do_IRQ(void)
|
||||
struct irq_source *source;
|
||||
int level, cpu;
|
||||
|
||||
irq_enter();
|
||||
|
||||
level = (__frame->tbr >> 4) & 0xf;
|
||||
cpu = smp_processor_id();
|
||||
|
||||
#if 0
|
||||
{
|
||||
static u32 irqcount;
|
||||
*(volatile u32 *) 0xe1200004 = ~((irqcount++ << 8) | level);
|
||||
*(volatile u16 *) 0xffc00100 = (u16) ~0x9999;
|
||||
mb();
|
||||
}
|
||||
#endif
|
||||
|
||||
if ((unsigned long) __frame - (unsigned long) (current + 1) < 512)
|
||||
BUG();
|
||||
|
||||
@ -308,40 +301,12 @@ asmlinkage void do_IRQ(void)
|
||||
|
||||
kstat_this_cpu.irqs[level]++;
|
||||
|
||||
irq_enter();
|
||||
|
||||
for (source = frv_irq_levels[level].sources; source; source = source->next)
|
||||
source->doirq(source);
|
||||
|
||||
irq_exit();
|
||||
|
||||
__clr_MASK(level);
|
||||
|
||||
/* only process softirqs if we didn't interrupt another interrupt handler */
|
||||
if ((__frame->psr & PSR_PIL) == PSR_PIL_0)
|
||||
if (local_softirq_pending())
|
||||
do_softirq();
|
||||
|
||||
#ifdef CONFIG_PREEMPT
|
||||
local_irq_disable();
|
||||
while (--current->preempt_count == 0) {
|
||||
if (!(__frame->psr & PSR_S) ||
|
||||
current->need_resched == 0 ||
|
||||
in_interrupt())
|
||||
break;
|
||||
current->preempt_count++;
|
||||
local_irq_enable();
|
||||
preempt_schedule();
|
||||
local_irq_disable();
|
||||
}
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
{
|
||||
*(volatile u16 *) 0xffc00100 = (u16) ~0x6666;
|
||||
mb();
|
||||
}
|
||||
#endif
|
||||
irq_exit();
|
||||
|
||||
} /* end do_IRQ() */
|
||||
|
||||
|
@ -43,15 +43,6 @@ void iounmap(void *addr)
|
||||
{
|
||||
}
|
||||
|
||||
/*
|
||||
* __iounmap unmaps nearly everything, so be careful
|
||||
* it doesn't free currently pointer/page tables anymore but it
|
||||
* wans't used anyway and might be added later.
|
||||
*/
|
||||
void __iounmap(void *addr, unsigned long size)
|
||||
{
|
||||
}
|
||||
|
||||
/*
|
||||
* Set new cache mode for some kernel address space.
|
||||
* The caller must push data for that range itself, if such data may already
|
||||
|
@ -33,6 +33,10 @@ config GENERIC_CALIBRATE_DELAY
|
||||
bool
|
||||
default y
|
||||
|
||||
config TIME_LOW_RES
|
||||
bool
|
||||
default y
|
||||
|
||||
config ISA
|
||||
bool
|
||||
default y
|
||||
|
@ -169,7 +169,7 @@ endif
|
||||
|
||||
config CPU_H8300H
|
||||
bool
|
||||
depends on (H8002 || H83007 || H83048 || H83068)
|
||||
depends on (H83002 || H83007 || H83048 || H83068)
|
||||
default y
|
||||
|
||||
config CPU_H8S
|
||||
|
3
arch/i386/boot/.gitignore
vendored
Normal file
3
arch/i386/boot/.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
bootsect
|
||||
bzImage
|
||||
setup
|
1
arch/i386/boot/tools/.gitignore
vendored
Normal file
1
arch/i386/boot/tools/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
build
|
1
arch/i386/kernel/.gitignore
vendored
Normal file
1
arch/i386/kernel/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
vsyscall.lds
|
@ -398,7 +398,11 @@ ignore_int:
|
||||
pushl 32(%esp)
|
||||
pushl 40(%esp)
|
||||
pushl $int_msg
|
||||
#ifdef CONFIG_EARLY_PRINTK
|
||||
call early_printk
|
||||
#else
|
||||
call printk
|
||||
#endif
|
||||
addl $(5*4),%esp
|
||||
popl %ds
|
||||
popl %es
|
||||
|
@ -299,7 +299,7 @@ ENTRY(sys_call_table)
|
||||
.long sys_mknodat
|
||||
.long sys_fchownat
|
||||
.long sys_futimesat
|
||||
.long sys_newfstatat /* 300 */
|
||||
.long sys_fstatat64 /* 300 */
|
||||
.long sys_unlinkat
|
||||
.long sys_renameat
|
||||
.long sys_linkat
|
||||
|
@ -282,6 +282,10 @@ time_cpufreq_notifier(struct notifier_block *nb, unsigned long val,
|
||||
if (val != CPUFREQ_RESUMECHANGE)
|
||||
write_seqlock_irq(&xtime_lock);
|
||||
if (!ref_freq) {
|
||||
if (!freq->old){
|
||||
ref_freq = freq->new;
|
||||
goto end;
|
||||
}
|
||||
ref_freq = freq->old;
|
||||
loops_per_jiffy_ref = cpu_data[freq->cpu].loops_per_jiffy;
|
||||
#ifndef CONFIG_SMP
|
||||
@ -307,6 +311,7 @@ time_cpufreq_notifier(struct notifier_block *nb, unsigned long val,
|
||||
#endif
|
||||
}
|
||||
|
||||
end:
|
||||
if (val != CPUFREQ_RESUMECHANGE)
|
||||
write_sequnlock_irq(&xtime_lock);
|
||||
|
||||
|
@ -7,6 +7,21 @@
|
||||
* for details.
|
||||
*/
|
||||
|
||||
/*
|
||||
* The caller puts arg2 in %ecx, which gets pushed. The kernel will use
|
||||
* %ecx itself for arg2. The pushing is because the sysexit instruction
|
||||
* (found in entry.S) requires that we clobber %ecx with the desired %esp.
|
||||
* User code might expect that %ecx is unclobbered though, as it would be
|
||||
* for returning via the iret instruction, so we must push and pop.
|
||||
*
|
||||
* The caller puts arg3 in %edx, which the sysexit instruction requires
|
||||
* for %eip. Thus, exactly as for arg2, we must push and pop.
|
||||
*
|
||||
* Arg6 is different. The caller puts arg6 in %ebp. Since the sysenter
|
||||
* instruction clobbers %esp, the user's %esp won't even survive entry
|
||||
* into the kernel. We store %esp in %ebp. Code in entry.S must fetch
|
||||
* arg6 from the stack.
|
||||
*/
|
||||
.text
|
||||
.globl __kernel_vsyscall
|
||||
.type __kernel_vsyscall,@function
|
||||
|
@ -20,7 +20,20 @@ struct frame_head {
|
||||
} __attribute__((packed));
|
||||
|
||||
static struct frame_head *
|
||||
dump_backtrace(struct frame_head * head)
|
||||
dump_kernel_backtrace(struct frame_head * head)
|
||||
{
|
||||
oprofile_add_trace(head->ret);
|
||||
|
||||
/* frame pointers should strictly progress back up the stack
|
||||
* (towards higher addresses) */
|
||||
if (head >= head->ebp)
|
||||
return NULL;
|
||||
|
||||
return head->ebp;
|
||||
}
|
||||
|
||||
static struct frame_head *
|
||||
dump_user_backtrace(struct frame_head * head)
|
||||
{
|
||||
struct frame_head bufhead[2];
|
||||
|
||||
@ -105,10 +118,10 @@ x86_backtrace(struct pt_regs * const regs, unsigned int depth)
|
||||
|
||||
if (!user_mode_vm(regs)) {
|
||||
while (depth-- && valid_kernel_stack(head, regs))
|
||||
head = dump_backtrace(head);
|
||||
head = dump_kernel_backtrace(head);
|
||||
return;
|
||||
}
|
||||
|
||||
while (depth-- && head)
|
||||
head = dump_backtrace(head);
|
||||
head = dump_user_backtrace(head);
|
||||
}
|
||||
|
@ -21,6 +21,10 @@ config GENERIC_CALIBRATE_DELAY
|
||||
bool
|
||||
default y
|
||||
|
||||
config TIME_LOW_RES
|
||||
bool
|
||||
default y
|
||||
|
||||
config ARCH_MAY_HAVE_PC_FDC
|
||||
bool
|
||||
depends on Q40 || (BROKEN && SUN3X)
|
||||
|
@ -131,9 +131,8 @@
|
||||
| Copyright (C) Motorola, Inc. 1990
|
||||
| All Rights Reserved
|
||||
|
|
||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
||||
| The copyright notice above does not evidence any
|
||||
| actual or intended publication of such source code.
|
||||
| For details on the license for this file, please see the
|
||||
| file, README, in this same directory.
|
||||
|
||||
|BINDEC idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||
|
||||
|
@ -60,9 +60,8 @@
|
||||
| Copyright (C) Motorola, Inc. 1990
|
||||
| All Rights Reserved
|
||||
|
|
||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
||||
| The copyright notice above does not evidence any
|
||||
| actual or intended publication of such source code.
|
||||
| For details on the license for this file, please see the
|
||||
| file, README, in this same directory.
|
||||
|
||||
|BINSTR idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||
|
||||
|
@ -152,9 +152,8 @@
|
||||
| Copyright (C) Motorola, Inc. 1990
|
||||
| All Rights Reserved
|
||||
|
|
||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
||||
| The copyright notice above does not evidence any
|
||||
| actual or intended publication of such source code.
|
||||
| For details on the license for this file, please see the
|
||||
| file, README, in this same directory.
|
||||
|
||||
|BUGFIX idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||
|
||||
|
@ -69,9 +69,8 @@
|
||||
| Copyright (C) Motorola, Inc. 1990
|
||||
| All Rights Reserved
|
||||
|
|
||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
||||
| The copyright notice above does not evidence any
|
||||
| actual or intended publication of such source code.
|
||||
| For details on the license for this file, please see the
|
||||
| file, README, in this same directory.
|
||||
|
||||
|DECBIN idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||
|
||||
|
@ -22,9 +22,8 @@
|
||||
| Copyright (C) Motorola, Inc. 1990
|
||||
| All Rights Reserved
|
||||
|
|
||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
||||
| The copyright notice above does not evidence any
|
||||
| actual or intended publication of such source code.
|
||||
| For details on the license for this file, please see the
|
||||
| file, README, in this same directory.
|
||||
|
||||
DO_FUNC: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||
|
||||
|
@ -5,9 +5,8 @@
|
||||
| Copyright (C) Motorola, Inc. 1990
|
||||
| All Rights Reserved
|
||||
|
|
||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
||||
| The copyright notice above does not evidence any
|
||||
| actual or intended publication of such source code.
|
||||
| For details on the license for this file, please see the
|
||||
| file, README, in this same directory.
|
||||
|
||||
| fpsp.h --- stack frame offsets during FPSP exception handling
|
||||
|
|
||||
|
@ -29,9 +29,8 @@
|
||||
| Copyright (C) Motorola, Inc. 1990
|
||||
| All Rights Reserved
|
||||
|
|
||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
||||
| The copyright notice above does not evidence any
|
||||
| actual or intended publication of such source code.
|
||||
| For details on the license for this file, please see the
|
||||
| file, README, in this same directory.
|
||||
|
||||
GEN_EXCEPT: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||
|
||||
|
@ -54,9 +54,8 @@
|
||||
| Copyright (C) Motorola, Inc. 1990
|
||||
| All Rights Reserved
|
||||
|
|
||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
||||
| The copyright notice above does not evidence any
|
||||
| actual or intended publication of such source code.
|
||||
| For details on the license for this file, please see the
|
||||
| file, README, in this same directory.
|
||||
|
||||
GET_OP: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||
|
||||
|
@ -12,9 +12,8 @@
|
||||
| Copyright (C) Motorola, Inc. 1990
|
||||
| All Rights Reserved
|
||||
|
|
||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
||||
| The copyright notice above does not evidence any
|
||||
| actual or intended publication of such source code.
|
||||
| For details on the license for this file, please see the
|
||||
| file, README, in this same directory.
|
||||
|
||||
KERNEL_EX: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||
|
||||
|
@ -16,9 +16,8 @@
|
||||
| Copyright (C) Motorola, Inc. 1990
|
||||
| All Rights Reserved
|
||||
|
|
||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
||||
| The copyright notice above does not evidence any
|
||||
| actual or intended publication of such source code.
|
||||
| For details on the license for this file, please see the
|
||||
| file, README, in this same directory.
|
||||
|
||||
RES_FUNC: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||
|
||||
|
@ -8,9 +8,8 @@
|
||||
| Copyright (C) Motorola, Inc. 1990
|
||||
| All Rights Reserved
|
||||
|
|
||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
||||
| The copyright notice above does not evidence any
|
||||
| actual or intended publication of such source code.
|
||||
| For details on the license for this file, please see the
|
||||
| file, README, in this same directory.
|
||||
|
||||
|ROUND idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||
|
||||
|
@ -38,9 +38,8 @@
|
||||
| Copyright (C) Motorola, Inc. 1990
|
||||
| All Rights Reserved
|
||||
|
|
||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
||||
| The copyright notice above does not evidence any
|
||||
| actual or intended publication of such source code.
|
||||
| For details on the license for this file, please see the
|
||||
| file, README, in this same directory.
|
||||
|
||||
|SACOS idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||
|
||||
|
@ -38,9 +38,8 @@
|
||||
| Copyright (C) Motorola, Inc. 1990
|
||||
| All Rights Reserved
|
||||
|
|
||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
||||
| The copyright notice above does not evidence any
|
||||
| actual or intended publication of such source code.
|
||||
| For details on the license for this file, please see the
|
||||
| file, README, in this same directory.
|
||||
|
||||
|SASIN idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||
|
||||
|
@ -43,9 +43,8 @@
|
||||
| Copyright (C) Motorola, Inc. 1990
|
||||
| All Rights Reserved
|
||||
|
|
||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
||||
| The copyright notice above does not evidence any
|
||||
| actual or intended publication of such source code.
|
||||
| For details on the license for this file, please see the
|
||||
| file, README, in this same directory.
|
||||
|
||||
|satan idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||
|
||||
|
@ -45,9 +45,8 @@
|
||||
| Copyright (C) Motorola, Inc. 1990
|
||||
| All Rights Reserved
|
||||
|
|
||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
||||
| The copyright notice above does not evidence any
|
||||
| actual or intended publication of such source code.
|
||||
| For details on the license for this file, please see the
|
||||
| file, README, in this same directory.
|
||||
|
||||
|satanh idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||
|
||||
|
@ -21,9 +21,8 @@
|
||||
| Copyright (C) Motorola, Inc. 1990
|
||||
| All Rights Reserved
|
||||
|
|
||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
||||
| The copyright notice above does not evidence any
|
||||
| actual or intended publication of such source code.
|
||||
| For details on the license for this file, please see the
|
||||
| file, README, in this same directory.
|
||||
|
||||
|SCALE idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||
|
||||
|
@ -49,9 +49,8 @@
|
||||
| Copyright (C) Motorola, Inc. 1990
|
||||
| All Rights Reserved
|
||||
|
|
||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
||||
| The copyright notice above does not evidence any
|
||||
| actual or intended publication of such source code.
|
||||
| For details on the license for this file, please see the
|
||||
| file, README, in this same directory.
|
||||
|
||||
|SCOSH idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||
|
||||
|
@ -331,9 +331,8 @@
|
||||
| Copyright (C) Motorola, Inc. 1990
|
||||
| All Rights Reserved
|
||||
|
|
||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
||||
| The copyright notice above does not evidence any
|
||||
| actual or intended publication of such source code.
|
||||
| For details on the license for this file, please see the
|
||||
| file, README, in this same directory.
|
||||
|
||||
|setox idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||
|
||||
|
@ -24,9 +24,8 @@
|
||||
| Copyright (C) Motorola, Inc. 1990
|
||||
| All Rights Reserved
|
||||
|
|
||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
||||
| The copyright notice above does not evidence any
|
||||
| actual or intended publication of such source code.
|
||||
| For details on the license for this file, please see the
|
||||
| file, README, in this same directory.
|
||||
|
||||
|SGETEM idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||
|
||||
|
@ -51,9 +51,8 @@
|
||||
| Copyright (C) Motorola, Inc. 1990
|
||||
| All Rights Reserved
|
||||
|
|
||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
||||
| The copyright notice above does not evidence any
|
||||
| actual or intended publication of such source code.
|
||||
| For details on the license for this file, please see the
|
||||
| file, README, in this same directory.
|
||||
|
||||
|SINT idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||
|
||||
|
@ -30,9 +30,8 @@
|
||||
| Copyright (C) Motorola, Inc. 1990
|
||||
| All Rights Reserved
|
||||
|
|
||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
||||
| The copyright notice above does not evidence any
|
||||
| actual or intended publication of such source code.
|
||||
| For details on the license for this file, please see the
|
||||
| file, README, in this same directory.
|
||||
|
||||
|
|
||||
| Modified for Linux-1.3.x by Jes Sorensen (jds@kom.auc.dk)
|
||||
|
@ -96,9 +96,8 @@
|
||||
| Copyright (C) Motorola, Inc. 1990
|
||||
| All Rights Reserved
|
||||
|
|
||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
||||
| The copyright notice above does not evidence any
|
||||
| actual or intended publication of such source code.
|
||||
| For details on the license for this file, please see the
|
||||
| file, README, in this same directory.
|
||||
|
||||
|SLOG2 idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||
|
||||
|
@ -63,9 +63,8 @@
|
||||
| Copyright (C) Motorola, Inc. 1990
|
||||
| All Rights Reserved
|
||||
|
|
||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
||||
| The copyright notice above does not evidence any
|
||||
| actual or intended publication of such source code.
|
||||
| For details on the license for this file, please see the
|
||||
| file, README, in this same directory.
|
||||
|
||||
|slogn idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||
|
||||
|
@ -15,9 +15,8 @@
|
||||
| Copyright (C) Motorola, Inc. 1990
|
||||
| All Rights Reserved
|
||||
|
|
||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
||||
| The copyright notice above does not evidence any
|
||||
| actual or intended publication of such source code.
|
||||
| For details on the license for this file, please see the
|
||||
| file, README, in this same directory.
|
||||
|
||||
|SMOVECR idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||
|
||||
|
@ -66,9 +66,8 @@
|
||||
| Copyright (C) Motorola, Inc. 1990
|
||||
| All Rights Reserved
|
||||
|
|
||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
||||
| The copyright notice above does not evidence any
|
||||
| actual or intended publication of such source code.
|
||||
| For details on the license for this file, please see the
|
||||
| file, README, in this same directory.
|
||||
|
||||
SREM_MOD: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||
|
||||
|
@ -83,9 +83,8 @@
|
||||
| Copyright (C) Motorola, Inc. 1990
|
||||
| All Rights Reserved
|
||||
|
|
||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
||||
| The copyright notice above does not evidence any
|
||||
| actual or intended publication of such source code.
|
||||
| For details on the license for this file, please see the
|
||||
| file, README, in this same directory.
|
||||
|
||||
|SSIN idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||
|
||||
|
@ -49,9 +49,8 @@
|
||||
| Copyright (C) Motorola, Inc. 1990
|
||||
| All Rights Reserved
|
||||
|
|
||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
||||
| The copyright notice above does not evidence any
|
||||
| actual or intended publication of such source code.
|
||||
| For details on the license for this file, please see the
|
||||
| file, README, in this same directory.
|
||||
|
||||
|SSINH idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||
|
||||
|
@ -50,9 +50,8 @@
|
||||
| Copyright (C) Motorola, Inc. 1990
|
||||
| All Rights Reserved
|
||||
|
|
||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
||||
| The copyright notice above does not evidence any
|
||||
| actual or intended publication of such source code.
|
||||
| For details on the license for this file, please see the
|
||||
| file, README, in this same directory.
|
||||
|
||||
|STAN idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||
|
||||
|
@ -49,9 +49,8 @@
|
||||
| Copyright (C) Motorola, Inc. 1990
|
||||
| All Rights Reserved
|
||||
|
|
||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
||||
| The copyright notice above does not evidence any
|
||||
| actual or intended publication of such source code.
|
||||
| For details on the license for this file, please see the
|
||||
| file, README, in this same directory.
|
||||
|
||||
|STANH idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||
|
||||
|
@ -19,9 +19,8 @@
|
||||
| Copyright (C) Motorola, Inc. 1990
|
||||
| All Rights Reserved
|
||||
|
|
||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
||||
| The copyright notice above does not evidence any
|
||||
| actual or intended publication of such source code.
|
||||
| For details on the license for this file, please see the
|
||||
| file, README, in this same directory.
|
||||
|
||||
STO_RES: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||
|
||||
|
@ -76,9 +76,8 @@
|
||||
| Copyright (C) Motorola, Inc. 1990
|
||||
| All Rights Reserved
|
||||
|
|
||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
||||
| The copyright notice above does not evidence any
|
||||
| actual or intended publication of such source code.
|
||||
| For details on the license for this file, please see the
|
||||
| file, README, in this same directory.
|
||||
|
||||
|STWOTOX idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||
|
||||
|
@ -17,9 +17,8 @@
|
||||
| Copyright (C) Motorola, Inc. 1990
|
||||
| All Rights Reserved
|
||||
|
|
||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
||||
| The copyright notice above does not evidence any
|
||||
| actual or intended publication of such source code.
|
||||
| For details on the license for this file, please see the
|
||||
| file, README, in this same directory.
|
||||
|
||||
|TBLDO idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||
|
||||
|
@ -16,9 +16,8 @@
|
||||
| Copyright (C) Motorola, Inc. 1990
|
||||
| All Rights Reserved
|
||||
|
|
||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
||||
| The copyright notice above does not evidence any
|
||||
| actual or intended publication of such source code.
|
||||
| For details on the license for this file, please see the
|
||||
| file, README, in this same directory.
|
||||
|
||||
|UTIL idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||
|
||||
|
@ -13,9 +13,8 @@
|
||||
| Copyright (C) Motorola, Inc. 1990
|
||||
| All Rights Reserved
|
||||
|
|
||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
||||
| The copyright notice above does not evidence any
|
||||
| actual or intended publication of such source code.
|
||||
| For details on the license for this file, please see the
|
||||
| file, README, in this same directory.
|
||||
|
||||
X_BSUN: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||
|
||||
|
@ -13,9 +13,8 @@
|
||||
| Copyright (C) Motorola, Inc. 1990
|
||||
| All Rights Reserved
|
||||
|
|
||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
||||
| The copyright notice above does not evidence any
|
||||
| actual or intended publication of such source code.
|
||||
| For details on the license for this file, please see the
|
||||
| file, README, in this same directory.
|
||||
|
||||
X_FLINE: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||
|
||||
|
@ -43,9 +43,8 @@
|
||||
| Copyright (C) Motorola, Inc. 1990
|
||||
| All Rights Reserved
|
||||
|
|
||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
||||
| The copyright notice above does not evidence any
|
||||
| actual or intended publication of such source code.
|
||||
| For details on the license for this file, please see the
|
||||
| file, README, in this same directory.
|
||||
|
||||
X_OPERR: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||
|
||||
|
@ -35,9 +35,8 @@
|
||||
| Copyright (C) Motorola, Inc. 1990
|
||||
| All Rights Reserved
|
||||
|
|
||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
||||
| The copyright notice above does not evidence any
|
||||
| actual or intended publication of such source code.
|
||||
| For details on the license for this file, please see the
|
||||
| file, README, in this same directory.
|
||||
|
||||
X_OVFL: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||
|
||||
|
@ -22,9 +22,8 @@
|
||||
| Copyright (C) Motorola, Inc. 1990
|
||||
| All Rights Reserved
|
||||
|
|
||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
||||
| The copyright notice above does not evidence any
|
||||
| actual or intended publication of such source code.
|
||||
| For details on the license for this file, please see the
|
||||
| file, README, in this same directory.
|
||||
|
||||
X_SNAN: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||
|
||||
|
@ -11,9 +11,8 @@
|
||||
| Copyright (C) Motorola, Inc. 1990
|
||||
| All Rights Reserved
|
||||
|
|
||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
||||
| The copyright notice above does not evidence any
|
||||
| actual or intended publication of such source code.
|
||||
| For details on the license for this file, please see the
|
||||
| file, README, in this same directory.
|
||||
|
||||
X_STORE: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||
|
||||
|
@ -21,9 +21,8 @@
|
||||
| Copyright (C) Motorola, Inc. 1990
|
||||
| All Rights Reserved
|
||||
|
|
||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
||||
| The copyright notice above does not evidence any
|
||||
| actual or intended publication of such source code.
|
||||
| For details on the license for this file, please see the
|
||||
| file, README, in this same directory.
|
||||
|
||||
X_UNFL: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||
|
||||
|
@ -22,9 +22,8 @@
|
||||
| Copyright (C) Motorola, Inc. 1990
|
||||
| All Rights Reserved
|
||||
|
|
||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
||||
| The copyright notice above does not evidence any
|
||||
| actual or intended publication of such source code.
|
||||
| For details on the license for this file, please see the
|
||||
| file, README, in this same directory.
|
||||
|
||||
X_UNIMP: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||
|
||||
|
@ -23,9 +23,8 @@
|
||||
| Copyright (C) Motorola, Inc. 1990
|
||||
| All Rights Reserved
|
||||
|
|
||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
||||
| The copyright notice above does not evidence any
|
||||
| actual or intended publication of such source code.
|
||||
| For details on the license for this file, please see the
|
||||
| file, README, in this same directory.
|
||||
|
||||
X_UNSUPP: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||
|
||||
|
@ -29,6 +29,10 @@ config GENERIC_CALIBRATE_DELAY
|
||||
bool
|
||||
default y
|
||||
|
||||
config TIME_LOW_RES
|
||||
bool
|
||||
default y
|
||||
|
||||
source "init/Kconfig"
|
||||
|
||||
menu "Processor type and features"
|
||||
|
@ -94,7 +94,6 @@ endif
|
||||
# machines may also. Since BFD is incredibly buggy with respect to
|
||||
# crossformat linking we rely on the elf2ecoff tool for format conversion.
|
||||
#
|
||||
cflags-y += -I $(TOPDIR)/include/asm/gcc
|
||||
cflags-y += -G 0 -mno-abicalls -fno-pic -pipe
|
||||
LDFLAGS_vmlinux += -G 0 -static -n -nostdlib
|
||||
MODFLAGS += -mlong-calls
|
||||
|
@ -25,6 +25,7 @@
|
||||
#include <linux/a.out.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/completion.h>
|
||||
#include <linux/kallsyms.h>
|
||||
|
||||
#include <asm/abi.h>
|
||||
#include <asm/bootinfo.h>
|
||||
@ -272,46 +273,19 @@ long kernel_thread(int (*fn)(void *), void *arg, unsigned long flags)
|
||||
|
||||
static struct mips_frame_info {
|
||||
void *func;
|
||||
int omit_fp; /* compiled without fno-omit-frame-pointer */
|
||||
int frame_offset;
|
||||
unsigned long func_size;
|
||||
int frame_size;
|
||||
int pc_offset;
|
||||
} schedule_frame, mfinfo[] = {
|
||||
{ schedule, 0 }, /* must be first */
|
||||
/* arch/mips/kernel/semaphore.c */
|
||||
{ __down, 1 },
|
||||
{ __down_interruptible, 1 },
|
||||
/* kernel/sched.c */
|
||||
#ifdef CONFIG_PREEMPT
|
||||
{ preempt_schedule, 0 },
|
||||
#endif
|
||||
{ wait_for_completion, 0 },
|
||||
{ interruptible_sleep_on, 0 },
|
||||
{ interruptible_sleep_on_timeout, 0 },
|
||||
{ sleep_on, 0 },
|
||||
{ sleep_on_timeout, 0 },
|
||||
{ yield, 0 },
|
||||
{ io_schedule, 0 },
|
||||
{ io_schedule_timeout, 0 },
|
||||
#if defined(CONFIG_SMP) && defined(CONFIG_PREEMPT)
|
||||
{ __preempt_spin_lock, 0 },
|
||||
{ __preempt_write_lock, 0 },
|
||||
#endif
|
||||
/* kernel/timer.c */
|
||||
{ schedule_timeout, 1 },
|
||||
/* { nanosleep_restart, 1 }, */
|
||||
/* lib/rwsem-spinlock.c */
|
||||
{ __down_read, 1 },
|
||||
{ __down_write, 1 },
|
||||
};
|
||||
} *schedule_frame, mfinfo[64];
|
||||
static int mfinfo_num;
|
||||
|
||||
static int mips_frame_info_initialized;
|
||||
static int __init get_frame_info(struct mips_frame_info *info)
|
||||
{
|
||||
int i;
|
||||
void *func = info->func;
|
||||
union mips_instruction *ip = (union mips_instruction *)func;
|
||||
info->pc_offset = -1;
|
||||
info->frame_offset = info->omit_fp ? 0 : -1;
|
||||
info->frame_size = 0;
|
||||
for (i = 0; i < 128; i++, ip++) {
|
||||
/* if jal, jalr, jr, stop. */
|
||||
if (ip->j_format.opcode == jal_op ||
|
||||
@ -320,6 +294,23 @@ static int __init get_frame_info(struct mips_frame_info *info)
|
||||
ip->r_format.func == jr_op)))
|
||||
break;
|
||||
|
||||
if (info->func_size && i >= info->func_size / 4)
|
||||
break;
|
||||
if (
|
||||
#ifdef CONFIG_32BIT
|
||||
ip->i_format.opcode == addiu_op &&
|
||||
#endif
|
||||
#ifdef CONFIG_64BIT
|
||||
ip->i_format.opcode == daddiu_op &&
|
||||
#endif
|
||||
ip->i_format.rs == 29 &&
|
||||
ip->i_format.rt == 29) {
|
||||
/* addiu/daddiu sp,sp,-imm */
|
||||
if (info->frame_size)
|
||||
continue;
|
||||
info->frame_size = - ip->i_format.simmediate;
|
||||
}
|
||||
|
||||
if (
|
||||
#ifdef CONFIG_32BIT
|
||||
ip->i_format.opcode == sw_op &&
|
||||
@ -327,31 +318,20 @@ static int __init get_frame_info(struct mips_frame_info *info)
|
||||
#ifdef CONFIG_64BIT
|
||||
ip->i_format.opcode == sd_op &&
|
||||
#endif
|
||||
ip->i_format.rs == 29)
|
||||
{
|
||||
ip->i_format.rs == 29 &&
|
||||
ip->i_format.rt == 31) {
|
||||
/* sw / sd $ra, offset($sp) */
|
||||
if (ip->i_format.rt == 31) {
|
||||
if (info->pc_offset != -1)
|
||||
continue;
|
||||
info->pc_offset =
|
||||
ip->i_format.simmediate / sizeof(long);
|
||||
}
|
||||
/* sw / sd $s8, offset($sp) */
|
||||
if (ip->i_format.rt == 30) {
|
||||
//#if 0 /* gcc 3.4 does aggressive optimization... */
|
||||
if (info->frame_offset != -1)
|
||||
continue;
|
||||
//#endif
|
||||
info->frame_offset =
|
||||
ip->i_format.simmediate / sizeof(long);
|
||||
}
|
||||
if (info->pc_offset != -1)
|
||||
continue;
|
||||
info->pc_offset =
|
||||
ip->i_format.simmediate / sizeof(long);
|
||||
}
|
||||
}
|
||||
if (info->pc_offset == -1 || info->frame_offset == -1) {
|
||||
printk("Can't analyze prologue code at %p\n", func);
|
||||
if (info->pc_offset == -1 || info->frame_size == 0) {
|
||||
if (func == schedule)
|
||||
printk("Can't analyze prologue code at %p\n", func);
|
||||
info->pc_offset = -1;
|
||||
info->frame_offset = -1;
|
||||
return -1;
|
||||
info->frame_size = 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -359,25 +339,36 @@ static int __init get_frame_info(struct mips_frame_info *info)
|
||||
|
||||
static int __init frame_info_init(void)
|
||||
{
|
||||
int i, found;
|
||||
for (i = 0; i < ARRAY_SIZE(mfinfo); i++)
|
||||
if (get_frame_info(&mfinfo[i]))
|
||||
return -1;
|
||||
schedule_frame = mfinfo[0];
|
||||
/* bubble sort */
|
||||
do {
|
||||
struct mips_frame_info tmp;
|
||||
found = 0;
|
||||
for (i = 1; i < ARRAY_SIZE(mfinfo); i++) {
|
||||
if (mfinfo[i-1].func > mfinfo[i].func) {
|
||||
tmp = mfinfo[i];
|
||||
mfinfo[i] = mfinfo[i-1];
|
||||
mfinfo[i-1] = tmp;
|
||||
found = 1;
|
||||
}
|
||||
}
|
||||
} while (found);
|
||||
mips_frame_info_initialized = 1;
|
||||
int i;
|
||||
#ifdef CONFIG_KALLSYMS
|
||||
char *modname;
|
||||
char namebuf[KSYM_NAME_LEN + 1];
|
||||
unsigned long start, size, ofs;
|
||||
extern char __sched_text_start[], __sched_text_end[];
|
||||
extern char __lock_text_start[], __lock_text_end[];
|
||||
|
||||
start = (unsigned long)__sched_text_start;
|
||||
for (i = 0; i < ARRAY_SIZE(mfinfo); i++) {
|
||||
if (start == (unsigned long)schedule)
|
||||
schedule_frame = &mfinfo[i];
|
||||
if (!kallsyms_lookup(start, &size, &ofs, &modname, namebuf))
|
||||
break;
|
||||
mfinfo[i].func = (void *)(start + ofs);
|
||||
mfinfo[i].func_size = size;
|
||||
start += size - ofs;
|
||||
if (start >= (unsigned long)__lock_text_end)
|
||||
break;
|
||||
if (start == (unsigned long)__sched_text_end)
|
||||
start = (unsigned long)__lock_text_start;
|
||||
}
|
||||
#else
|
||||
mfinfo[0].func = schedule;
|
||||
schedule_frame = &mfinfo[0];
|
||||
#endif
|
||||
for (i = 0; i < ARRAY_SIZE(mfinfo) && mfinfo[i].func; i++)
|
||||
get_frame_info(&mfinfo[i]);
|
||||
|
||||
mfinfo_num = i;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -394,47 +385,52 @@ unsigned long thread_saved_pc(struct task_struct *tsk)
|
||||
if (t->reg31 == (unsigned long) ret_from_fork)
|
||||
return t->reg31;
|
||||
|
||||
if (schedule_frame.pc_offset < 0)
|
||||
if (!schedule_frame || schedule_frame->pc_offset < 0)
|
||||
return 0;
|
||||
return ((unsigned long *)t->reg29)[schedule_frame.pc_offset];
|
||||
return ((unsigned long *)t->reg29)[schedule_frame->pc_offset];
|
||||
}
|
||||
|
||||
/* get_wchan - a maintenance nightmare^W^Wpain in the ass ... */
|
||||
unsigned long get_wchan(struct task_struct *p)
|
||||
{
|
||||
unsigned long stack_page;
|
||||
unsigned long frame, pc;
|
||||
unsigned long pc;
|
||||
#ifdef CONFIG_KALLSYMS
|
||||
unsigned long frame;
|
||||
#endif
|
||||
|
||||
if (!p || p == current || p->state == TASK_RUNNING)
|
||||
return 0;
|
||||
|
||||
stack_page = (unsigned long)task_stack_page(p);
|
||||
if (!stack_page || !mips_frame_info_initialized)
|
||||
if (!stack_page || !mfinfo_num)
|
||||
return 0;
|
||||
|
||||
pc = thread_saved_pc(p);
|
||||
#ifdef CONFIG_KALLSYMS
|
||||
if (!in_sched_functions(pc))
|
||||
return pc;
|
||||
|
||||
frame = ((unsigned long *)p->thread.reg30)[schedule_frame.frame_offset];
|
||||
frame = p->thread.reg29 + schedule_frame->frame_size;
|
||||
do {
|
||||
int i;
|
||||
|
||||
if (frame < stack_page || frame > stack_page + THREAD_SIZE - 32)
|
||||
return 0;
|
||||
|
||||
for (i = ARRAY_SIZE(mfinfo) - 1; i >= 0; i--) {
|
||||
for (i = mfinfo_num - 1; i >= 0; i--) {
|
||||
if (pc >= (unsigned long) mfinfo[i].func)
|
||||
break;
|
||||
}
|
||||
if (i < 0)
|
||||
break;
|
||||
|
||||
if (mfinfo[i].omit_fp)
|
||||
break;
|
||||
pc = ((unsigned long *)frame)[mfinfo[i].pc_offset];
|
||||
frame = ((unsigned long *)frame)[mfinfo[i].frame_offset];
|
||||
if (!mfinfo[i].frame_size)
|
||||
break;
|
||||
frame += mfinfo[i].frame_size;
|
||||
} while (in_sched_functions(pc));
|
||||
#endif
|
||||
|
||||
return pc;
|
||||
}
|
||||
|
@ -623,7 +623,7 @@ einval: li v0, -EINVAL
|
||||
sys sys_mknodat 4 /* 4290 */
|
||||
sys sys_fchownat 5
|
||||
sys sys_futimesat 3
|
||||
sys sys_newfstatat 4
|
||||
sys sys_fstatat64 4
|
||||
sys sys_unlinkat 3
|
||||
sys sys_renameat 4 /* 4295 */
|
||||
sys sys_linkat 4
|
||||
|
@ -176,7 +176,7 @@ get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, size_t frame_size)
|
||||
if ((ka->sa.sa_flags & SA_ONSTACK) && (sas_ss_flags (sp) == 0))
|
||||
sp = current->sas_ss_sp + current->sas_ss_size;
|
||||
|
||||
return (void __user *)((sp - frame_size) & (ICACHE_REFILLS_WORKAROUND_WAR ? 32 : ALMASK));
|
||||
return (void __user *)((sp - frame_size) & (ICACHE_REFILLS_WORKAROUND_WAR ? ~(cpu_icache_line_size()-1) : ALMASK));
|
||||
}
|
||||
|
||||
static inline int install_sigtramp(unsigned int __user *tramp,
|
||||
|
@ -537,7 +537,7 @@ _sys32_rt_sigreturn(nabi_no_regargs struct pt_regs regs)
|
||||
/* The ucontext contains a stack32_t, so we must convert! */
|
||||
if (__get_user(sp, &frame->rs_uc.uc_stack.ss_sp))
|
||||
goto badframe;
|
||||
st.ss_size = (long) sp;
|
||||
st.ss_sp = (void *)(long) sp;
|
||||
if (__get_user(st.ss_size, &frame->rs_uc.uc_stack.ss_size))
|
||||
goto badframe;
|
||||
if (__get_user(st.ss_flags, &frame->rs_uc.uc_stack.ss_flags))
|
||||
|
@ -108,7 +108,7 @@ _sysn32_rt_sigreturn(nabi_no_regargs struct pt_regs regs)
|
||||
/* The ucontext contains a stack32_t, so we must convert! */
|
||||
if (__get_user(sp, &frame->rs_uc.uc_stack.ss_sp))
|
||||
goto badframe;
|
||||
st.ss_size = (long) sp;
|
||||
st.ss_sp = (void *)(long) sp;
|
||||
if (__get_user(st.ss_size, &frame->rs_uc.uc_stack.ss_size))
|
||||
goto badframe;
|
||||
if (__get_user(st.ss_flags, &frame->rs_uc.uc_stack.ss_flags))
|
||||
|
@ -68,6 +68,8 @@ void __init sanitize_tlb_entries(void)
|
||||
|
||||
set_c0_mvpcontrol(MVPCONTROL_VPC);
|
||||
|
||||
back_to_back_c0_hazard();
|
||||
|
||||
/* Disable TLB sharing */
|
||||
clear_c0_mvpcontrol(MVPCONTROL_STLB);
|
||||
|
||||
@ -102,35 +104,6 @@ void __init sanitize_tlb_entries(void)
|
||||
clear_c0_mvpcontrol(MVPCONTROL_VPC);
|
||||
}
|
||||
|
||||
#if 0
|
||||
/*
|
||||
* Use c0_MVPConf0 to find out how many CPUs are available, setting up
|
||||
* phys_cpu_present_map and the logical/physical mappings.
|
||||
*/
|
||||
void __init prom_build_cpu_map(void)
|
||||
{
|
||||
int i, num, ncpus;
|
||||
|
||||
cpus_clear(phys_cpu_present_map);
|
||||
|
||||
/* assume we boot on cpu 0.... */
|
||||
cpu_set(0, phys_cpu_present_map);
|
||||
__cpu_number_map[0] = 0;
|
||||
__cpu_logical_map[0] = 0;
|
||||
|
||||
if (cpu_has_mipsmt) {
|
||||
ncpus = ((read_c0_mvpconf0() & (MVPCONF0_PVPE)) >> MVPCONF0_PVPE_SHIFT) + 1;
|
||||
for (i=1, num=0; i< NR_CPUS && i<ncpus; i++) {
|
||||
cpu_set(i, phys_cpu_present_map);
|
||||
__cpu_number_map[i] = ++num;
|
||||
__cpu_logical_map[num] = i;
|
||||
}
|
||||
|
||||
printk(KERN_INFO "%i available secondary CPU(s)\n", num);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
static void ipi_resched_dispatch (struct pt_regs *regs)
|
||||
{
|
||||
do_IRQ(MIPS_CPU_IPI_RESCHED_IRQ, regs);
|
||||
@ -222,6 +195,9 @@ void prom_prepare_cpus(unsigned int max_cpus)
|
||||
|
||||
/* set config to be the same as vpe0, particularly kseg0 coherency alg */
|
||||
write_vpe_c0_config( read_c0_config());
|
||||
|
||||
/* Propagate Config7 */
|
||||
write_vpe_c0_config7(read_c0_config7());
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -471,61 +471,29 @@ struct flush_icache_range_args {
|
||||
static inline void local_r4k_flush_icache_range(void *args)
|
||||
{
|
||||
struct flush_icache_range_args *fir_args = args;
|
||||
unsigned long dc_lsize = cpu_dcache_line_size();
|
||||
unsigned long ic_lsize = cpu_icache_line_size();
|
||||
unsigned long sc_lsize = cpu_scache_line_size();
|
||||
unsigned long start = fir_args->start;
|
||||
unsigned long end = fir_args->end;
|
||||
unsigned long addr, aend;
|
||||
|
||||
if (!cpu_has_ic_fills_f_dc) {
|
||||
if (end - start > dcache_size) {
|
||||
r4k_blast_dcache();
|
||||
} else {
|
||||
R4600_HIT_CACHEOP_WAR_IMPL;
|
||||
addr = start & ~(dc_lsize - 1);
|
||||
aend = (end - 1) & ~(dc_lsize - 1);
|
||||
|
||||
while (1) {
|
||||
/* Hit_Writeback_Inv_D */
|
||||
protected_writeback_dcache_line(addr);
|
||||
if (addr == aend)
|
||||
break;
|
||||
addr += dc_lsize;
|
||||
}
|
||||
protected_blast_dcache_range(start, end);
|
||||
}
|
||||
|
||||
if (!cpu_icache_snoops_remote_store) {
|
||||
if (end - start > scache_size) {
|
||||
if (end - start > scache_size)
|
||||
r4k_blast_scache();
|
||||
} else {
|
||||
addr = start & ~(sc_lsize - 1);
|
||||
aend = (end - 1) & ~(sc_lsize - 1);
|
||||
|
||||
while (1) {
|
||||
/* Hit_Writeback_Inv_SD */
|
||||
protected_writeback_scache_line(addr);
|
||||
if (addr == aend)
|
||||
break;
|
||||
addr += sc_lsize;
|
||||
}
|
||||
}
|
||||
else
|
||||
protected_blast_scache_range(start, end);
|
||||
}
|
||||
}
|
||||
|
||||
if (end - start > icache_size)
|
||||
r4k_blast_icache();
|
||||
else {
|
||||
addr = start & ~(ic_lsize - 1);
|
||||
aend = (end - 1) & ~(ic_lsize - 1);
|
||||
while (1) {
|
||||
/* Hit_Invalidate_I */
|
||||
protected_flush_icache_line(addr);
|
||||
if (addr == aend)
|
||||
break;
|
||||
addr += ic_lsize;
|
||||
}
|
||||
}
|
||||
else
|
||||
protected_blast_icache_range(start, end);
|
||||
}
|
||||
|
||||
static void r4k_flush_icache_range(unsigned long start, unsigned long end)
|
||||
@ -619,27 +587,14 @@ static void r4k_flush_icache_page(struct vm_area_struct *vma,
|
||||
|
||||
static void r4k_dma_cache_wback_inv(unsigned long addr, unsigned long size)
|
||||
{
|
||||
unsigned long end, a;
|
||||
|
||||
/* Catch bad driver code */
|
||||
BUG_ON(size == 0);
|
||||
|
||||
if (cpu_has_subset_pcaches) {
|
||||
unsigned long sc_lsize = cpu_scache_line_size();
|
||||
|
||||
if (size >= scache_size) {
|
||||
if (size >= scache_size)
|
||||
r4k_blast_scache();
|
||||
return;
|
||||
}
|
||||
|
||||
a = addr & ~(sc_lsize - 1);
|
||||
end = (addr + size - 1) & ~(sc_lsize - 1);
|
||||
while (1) {
|
||||
flush_scache_line(a); /* Hit_Writeback_Inv_SD */
|
||||
if (a == end)
|
||||
break;
|
||||
a += sc_lsize;
|
||||
}
|
||||
else
|
||||
blast_scache_range(addr, addr + size);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -651,17 +606,8 @@ static void r4k_dma_cache_wback_inv(unsigned long addr, unsigned long size)
|
||||
if (size >= dcache_size) {
|
||||
r4k_blast_dcache();
|
||||
} else {
|
||||
unsigned long dc_lsize = cpu_dcache_line_size();
|
||||
|
||||
R4600_HIT_CACHEOP_WAR_IMPL;
|
||||
a = addr & ~(dc_lsize - 1);
|
||||
end = (addr + size - 1) & ~(dc_lsize - 1);
|
||||
while (1) {
|
||||
flush_dcache_line(a); /* Hit_Writeback_Inv_D */
|
||||
if (a == end)
|
||||
break;
|
||||
a += dc_lsize;
|
||||
}
|
||||
blast_dcache_range(addr, addr + size);
|
||||
}
|
||||
|
||||
bc_wback_inv(addr, size);
|
||||
@ -669,44 +615,22 @@ static void r4k_dma_cache_wback_inv(unsigned long addr, unsigned long size)
|
||||
|
||||
static void r4k_dma_cache_inv(unsigned long addr, unsigned long size)
|
||||
{
|
||||
unsigned long end, a;
|
||||
|
||||
/* Catch bad driver code */
|
||||
BUG_ON(size == 0);
|
||||
|
||||
if (cpu_has_subset_pcaches) {
|
||||
unsigned long sc_lsize = cpu_scache_line_size();
|
||||
|
||||
if (size >= scache_size) {
|
||||
if (size >= scache_size)
|
||||
r4k_blast_scache();
|
||||
return;
|
||||
}
|
||||
|
||||
a = addr & ~(sc_lsize - 1);
|
||||
end = (addr + size - 1) & ~(sc_lsize - 1);
|
||||
while (1) {
|
||||
flush_scache_line(a); /* Hit_Writeback_Inv_SD */
|
||||
if (a == end)
|
||||
break;
|
||||
a += sc_lsize;
|
||||
}
|
||||
else
|
||||
blast_scache_range(addr, addr + size);
|
||||
return;
|
||||
}
|
||||
|
||||
if (size >= dcache_size) {
|
||||
r4k_blast_dcache();
|
||||
} else {
|
||||
unsigned long dc_lsize = cpu_dcache_line_size();
|
||||
|
||||
R4600_HIT_CACHEOP_WAR_IMPL;
|
||||
a = addr & ~(dc_lsize - 1);
|
||||
end = (addr + size - 1) & ~(dc_lsize - 1);
|
||||
while (1) {
|
||||
flush_dcache_line(a); /* Hit_Writeback_Inv_D */
|
||||
if (a == end)
|
||||
break;
|
||||
a += dc_lsize;
|
||||
}
|
||||
blast_dcache_range(addr, addr + size);
|
||||
}
|
||||
|
||||
bc_inv(addr, size);
|
||||
|
@ -44,8 +44,6 @@ __asm__ __volatile__( \
|
||||
/* TX39H-style cache flush routines. */
|
||||
static void tx39h_flush_icache_all(void)
|
||||
{
|
||||
unsigned long start = KSEG0;
|
||||
unsigned long end = (start + icache_size);
|
||||
unsigned long flags, config;
|
||||
|
||||
/* disable icache (set ICE#) */
|
||||
@ -53,33 +51,18 @@ static void tx39h_flush_icache_all(void)
|
||||
config = read_c0_conf();
|
||||
write_c0_conf(config & ~TX39_CONF_ICE);
|
||||
TX39_STOP_STREAMING();
|
||||
|
||||
/* invalidate icache */
|
||||
while (start < end) {
|
||||
cache16_unroll32(start, Index_Invalidate_I);
|
||||
start += 0x200;
|
||||
}
|
||||
|
||||
blast_icache16();
|
||||
write_c0_conf(config);
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
|
||||
static void tx39h_dma_cache_wback_inv(unsigned long addr, unsigned long size)
|
||||
{
|
||||
unsigned long end, a;
|
||||
unsigned long dc_lsize = current_cpu_data.dcache.linesz;
|
||||
|
||||
/* Catch bad driver code */
|
||||
BUG_ON(size == 0);
|
||||
|
||||
iob();
|
||||
a = addr & ~(dc_lsize - 1);
|
||||
end = (addr + size - 1) & ~(dc_lsize - 1);
|
||||
while (1) {
|
||||
invalidate_dcache_line(a); /* Hit_Invalidate_D */
|
||||
if (a == end) break;
|
||||
a += dc_lsize;
|
||||
}
|
||||
blast_inv_dcache_range(addr, addr + size);
|
||||
}
|
||||
|
||||
|
||||
@ -241,42 +224,21 @@ static void tx39_flush_data_cache_page(unsigned long addr)
|
||||
|
||||
static void tx39_flush_icache_range(unsigned long start, unsigned long end)
|
||||
{
|
||||
unsigned long dc_lsize = current_cpu_data.dcache.linesz;
|
||||
unsigned long addr, aend;
|
||||
|
||||
if (end - start > dcache_size)
|
||||
tx39_blast_dcache();
|
||||
else {
|
||||
addr = start & ~(dc_lsize - 1);
|
||||
aend = (end - 1) & ~(dc_lsize - 1);
|
||||
|
||||
while (1) {
|
||||
/* Hit_Writeback_Inv_D */
|
||||
protected_writeback_dcache_line(addr);
|
||||
if (addr == aend)
|
||||
break;
|
||||
addr += dc_lsize;
|
||||
}
|
||||
}
|
||||
else
|
||||
protected_blast_dcache_range(start, end);
|
||||
|
||||
if (end - start > icache_size)
|
||||
tx39_blast_icache();
|
||||
else {
|
||||
unsigned long flags, config;
|
||||
addr = start & ~(dc_lsize - 1);
|
||||
aend = (end - 1) & ~(dc_lsize - 1);
|
||||
/* disable icache (set ICE#) */
|
||||
local_irq_save(flags);
|
||||
config = read_c0_conf();
|
||||
write_c0_conf(config & ~TX39_CONF_ICE);
|
||||
TX39_STOP_STREAMING();
|
||||
while (1) {
|
||||
/* Hit_Invalidate_I */
|
||||
protected_flush_icache_line(addr);
|
||||
if (addr == aend)
|
||||
break;
|
||||
addr += dc_lsize;
|
||||
}
|
||||
protected_blast_icache_range(start, end);
|
||||
write_c0_conf(config);
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
@ -311,7 +273,7 @@ static void tx39_flush_icache_page(struct vm_area_struct *vma, struct page *page
|
||||
|
||||
static void tx39_dma_cache_wback_inv(unsigned long addr, unsigned long size)
|
||||
{
|
||||
unsigned long end, a;
|
||||
unsigned long end;
|
||||
|
||||
if (((size | addr) & (PAGE_SIZE - 1)) == 0) {
|
||||
end = addr + size;
|
||||
@ -322,20 +284,13 @@ static void tx39_dma_cache_wback_inv(unsigned long addr, unsigned long size)
|
||||
} else if (size > dcache_size) {
|
||||
tx39_blast_dcache();
|
||||
} else {
|
||||
unsigned long dc_lsize = current_cpu_data.dcache.linesz;
|
||||
a = addr & ~(dc_lsize - 1);
|
||||
end = (addr + size - 1) & ~(dc_lsize - 1);
|
||||
while (1) {
|
||||
flush_dcache_line(a); /* Hit_Writeback_Inv_D */
|
||||
if (a == end) break;
|
||||
a += dc_lsize;
|
||||
}
|
||||
blast_dcache_range(addr, addr + size);
|
||||
}
|
||||
}
|
||||
|
||||
static void tx39_dma_cache_inv(unsigned long addr, unsigned long size)
|
||||
{
|
||||
unsigned long end, a;
|
||||
unsigned long end;
|
||||
|
||||
if (((size | addr) & (PAGE_SIZE - 1)) == 0) {
|
||||
end = addr + size;
|
||||
@ -346,14 +301,7 @@ static void tx39_dma_cache_inv(unsigned long addr, unsigned long size)
|
||||
} else if (size > dcache_size) {
|
||||
tx39_blast_dcache();
|
||||
} else {
|
||||
unsigned long dc_lsize = current_cpu_data.dcache.linesz;
|
||||
a = addr & ~(dc_lsize - 1);
|
||||
end = (addr + size - 1) & ~(dc_lsize - 1);
|
||||
while (1) {
|
||||
invalidate_dcache_line(a); /* Hit_Invalidate_D */
|
||||
if (a == end) break;
|
||||
a += dc_lsize;
|
||||
}
|
||||
blast_inv_dcache_range(addr, addr + size);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -29,6 +29,11 @@ config GENERIC_CALIBRATE_DELAY
|
||||
bool
|
||||
default y
|
||||
|
||||
config TIME_LOW_RES
|
||||
bool
|
||||
depends on SMP
|
||||
default y
|
||||
|
||||
config GENERIC_ISA_DMA
|
||||
bool
|
||||
|
||||
|
@ -377,15 +377,15 @@
|
||||
ENTRY_SAME(inotify_init)
|
||||
ENTRY_SAME(inotify_add_watch) /* 270 */
|
||||
ENTRY_SAME(inotify_rm_watch)
|
||||
ENTRY_COMP(pselect6)
|
||||
ENTRY_COMP(ppoll)
|
||||
ENTRY_SAME(ni_syscall) /* 271 ENTRY_COMP(pselect6) */
|
||||
ENTRY_SAME(ni_syscall) /* 272 ENTRY_COMP(ppoll) */
|
||||
ENTRY_SAME(migrate_pages)
|
||||
ENTRY_COMP(openat) /* 275 */
|
||||
ENTRY_SAME(mkdirat)
|
||||
ENTRY_SAME(mknodat)
|
||||
ENTRY_SAME(fchownat)
|
||||
ENTRY_COMP(futimesat)
|
||||
ENTRY_COMP(newfstatat) /* 280 */
|
||||
ENTRY_SAME(fstatat64) /* 280 */
|
||||
ENTRY_SAME(unlinkat)
|
||||
ENTRY_SAME(renameat)
|
||||
ENTRY_SAME(linkat)
|
||||
|
@ -83,6 +83,12 @@ config GENERIC_TBSYNC
|
||||
default y if PPC32 && SMP
|
||||
default n
|
||||
|
||||
config DEFAULT_UIMAGE
|
||||
bool
|
||||
help
|
||||
Used to allow a board to specify it wants a uImage built by default
|
||||
default n
|
||||
|
||||
menu "Processor support"
|
||||
choice
|
||||
prompt "Processor Type"
|
||||
|
@ -142,6 +142,7 @@ drivers-$(CONFIG_OPROFILE) += arch/powerpc/oprofile/
|
||||
# Default to zImage, override when needed
|
||||
defaultimage-y := zImage
|
||||
defaultimage-$(CONFIG_PPC_ISERIES) := vmlinux
|
||||
defaultimage-$(CONFIG_DEFAULT_UIMAGE) := uImage
|
||||
KBUILD_IMAGE := $(defaultimage-y)
|
||||
all: $(KBUILD_IMAGE)
|
||||
|
||||
|
@ -12,10 +12,10 @@ endif
|
||||
|
||||
obj-y := semaphore.o cputable.o ptrace.o syscalls.o \
|
||||
irq.o align.o signal_32.o pmc.o vdso.o \
|
||||
init_task.o process.o
|
||||
init_task.o process.o systbl.o
|
||||
obj-y += vdso32/
|
||||
obj-$(CONFIG_PPC64) += setup_64.o binfmt_elf32.o sys_ppc32.o \
|
||||
signal_64.o ptrace32.o systbl.o \
|
||||
signal_64.o ptrace32.o \
|
||||
paca.o cpu_setup_power4.o \
|
||||
firmware.o sysfs.o idle_64.o
|
||||
obj-$(CONFIG_PPC64) += vdso64/
|
||||
@ -46,7 +46,7 @@ extra-$(CONFIG_8xx) := head_8xx.o
|
||||
extra-y += vmlinux.lds
|
||||
|
||||
obj-y += time.o prom.o traps.o setup-common.o udbg.o
|
||||
obj-$(CONFIG_PPC32) += entry_32.o setup_32.o misc_32.o systbl.o
|
||||
obj-$(CONFIG_PPC32) += entry_32.o setup_32.o misc_32.o
|
||||
obj-$(CONFIG_PPC64) += misc_64.o dma_64.o iommu.o
|
||||
obj-$(CONFIG_PPC_MULTIPLATFORM) += prom_init.o
|
||||
obj-$(CONFIG_MODULES) += ppc_ksyms.o
|
||||
|
@ -36,8 +36,6 @@
|
||||
#ifdef CONFIG_PPC64
|
||||
#define sys_sigpending sys_ni_syscall
|
||||
#define sys_old_getrlimit sys_ni_syscall
|
||||
#else
|
||||
#define ppc_rtas sys_ni_syscall
|
||||
#endif
|
||||
|
||||
_GLOBAL(sys_call_table)
|
||||
@ -323,3 +321,4 @@ SYSCALL(spu_run)
|
||||
SYSCALL(spu_create)
|
||||
COMPAT_SYS(pselect6)
|
||||
COMPAT_SYS(ppoll)
|
||||
SYSCALL(unshare)
|
||||
|
@ -1048,286 +1048,3 @@ _GLOBAL(name) \
|
||||
blr
|
||||
|
||||
SYSCALL(execve)
|
||||
|
||||
/* Why isn't this a) automatic, b) written in 'C'? */
|
||||
.data
|
||||
.align 4
|
||||
_GLOBAL(sys_call_table)
|
||||
.long sys_restart_syscall /* 0 */
|
||||
.long sys_exit
|
||||
.long ppc_fork
|
||||
.long sys_read
|
||||
.long sys_write
|
||||
.long sys_open /* 5 */
|
||||
.long sys_close
|
||||
.long sys_waitpid
|
||||
.long sys_creat
|
||||
.long sys_link
|
||||
.long sys_unlink /* 10 */
|
||||
.long sys_execve
|
||||
.long sys_chdir
|
||||
.long sys_time
|
||||
.long sys_mknod
|
||||
.long sys_chmod /* 15 */
|
||||
.long sys_lchown
|
||||
.long sys_ni_syscall /* old break syscall holder */
|
||||
.long sys_stat
|
||||
.long sys_lseek
|
||||
.long sys_getpid /* 20 */
|
||||
.long sys_mount
|
||||
.long sys_oldumount
|
||||
.long sys_setuid
|
||||
.long sys_getuid
|
||||
.long sys_stime /* 25 */
|
||||
.long sys_ptrace
|
||||
.long sys_alarm
|
||||
.long sys_fstat
|
||||
.long sys_pause
|
||||
.long sys_utime /* 30 */
|
||||
.long sys_ni_syscall /* old stty syscall holder */
|
||||
.long sys_ni_syscall /* old gtty syscall holder */
|
||||
.long sys_access
|
||||
.long sys_nice
|
||||
.long sys_ni_syscall /* 35 */ /* old ftime syscall holder */
|
||||
.long sys_sync
|
||||
.long sys_kill
|
||||
.long sys_rename
|
||||
.long sys_mkdir
|
||||
.long sys_rmdir /* 40 */
|
||||
.long sys_dup
|
||||
.long sys_pipe
|
||||
.long sys_times
|
||||
.long sys_ni_syscall /* old prof syscall holder */
|
||||
.long sys_brk /* 45 */
|
||||
.long sys_setgid
|
||||
.long sys_getgid
|
||||
.long sys_signal
|
||||
.long sys_geteuid
|
||||
.long sys_getegid /* 50 */
|
||||
.long sys_acct
|
||||
.long sys_umount /* recycled never used phys() */
|
||||
.long sys_ni_syscall /* old lock syscall holder */
|
||||
.long sys_ioctl
|
||||
.long sys_fcntl /* 55 */
|
||||
.long sys_ni_syscall /* old mpx syscall holder */
|
||||
.long sys_setpgid
|
||||
.long sys_ni_syscall /* old ulimit syscall holder */
|
||||
.long sys_olduname
|
||||
.long sys_umask /* 60 */
|
||||
.long sys_chroot
|
||||
.long sys_ustat
|
||||
.long sys_dup2
|
||||
.long sys_getppid
|
||||
.long sys_getpgrp /* 65 */
|
||||
.long sys_setsid
|
||||
.long sys_sigaction
|
||||
.long sys_sgetmask
|
||||
.long sys_ssetmask
|
||||
.long sys_setreuid /* 70 */
|
||||
.long sys_setregid
|
||||
.long sys_sigsuspend
|
||||
.long sys_sigpending
|
||||
.long sys_sethostname
|
||||
.long sys_setrlimit /* 75 */
|
||||
.long sys_old_getrlimit
|
||||
.long sys_getrusage
|
||||
.long sys_gettimeofday
|
||||
.long sys_settimeofday
|
||||
.long sys_getgroups /* 80 */
|
||||
.long sys_setgroups
|
||||
.long ppc_select
|
||||
.long sys_symlink
|
||||
.long sys_lstat
|
||||
.long sys_readlink /* 85 */
|
||||
.long sys_uselib
|
||||
.long sys_swapon
|
||||
.long sys_reboot
|
||||
.long old_readdir
|
||||
.long sys_mmap /* 90 */
|
||||
.long sys_munmap
|
||||
.long sys_truncate
|
||||
.long sys_ftruncate
|
||||
.long sys_fchmod
|
||||
.long sys_fchown /* 95 */
|
||||
.long sys_getpriority
|
||||
.long sys_setpriority
|
||||
.long sys_ni_syscall /* old profil syscall holder */
|
||||
.long sys_statfs
|
||||
.long sys_fstatfs /* 100 */
|
||||
.long sys_ni_syscall
|
||||
.long sys_socketcall
|
||||
.long sys_syslog
|
||||
.long sys_setitimer
|
||||
.long sys_getitimer /* 105 */
|
||||
.long sys_newstat
|
||||
.long sys_newlstat
|
||||
.long sys_newfstat
|
||||
.long sys_uname
|
||||
.long sys_ni_syscall /* 110 */
|
||||
.long sys_vhangup
|
||||
.long sys_ni_syscall /* old 'idle' syscall */
|
||||
.long sys_ni_syscall
|
||||
.long sys_wait4
|
||||
.long sys_swapoff /* 115 */
|
||||
.long sys_sysinfo
|
||||
.long sys_ipc
|
||||
.long sys_fsync
|
||||
.long sys_sigreturn
|
||||
.long ppc_clone /* 120 */
|
||||
.long sys_setdomainname
|
||||
.long sys_newuname
|
||||
.long sys_ni_syscall
|
||||
.long sys_adjtimex
|
||||
.long sys_mprotect /* 125 */
|
||||
.long sys_sigprocmask
|
||||
.long sys_ni_syscall /* old sys_create_module */
|
||||
.long sys_init_module
|
||||
.long sys_delete_module
|
||||
.long sys_ni_syscall /* old sys_get_kernel_syms */ /* 130 */
|
||||
.long sys_quotactl
|
||||
.long sys_getpgid
|
||||
.long sys_fchdir
|
||||
.long sys_bdflush
|
||||
.long sys_sysfs /* 135 */
|
||||
.long sys_personality
|
||||
.long sys_ni_syscall /* for afs_syscall */
|
||||
.long sys_setfsuid
|
||||
.long sys_setfsgid
|
||||
.long sys_llseek /* 140 */
|
||||
.long sys_getdents
|
||||
.long ppc_select
|
||||
.long sys_flock
|
||||
.long sys_msync
|
||||
.long sys_readv /* 145 */
|
||||
.long sys_writev
|
||||
.long sys_getsid
|
||||
.long sys_fdatasync
|
||||
.long sys_sysctl
|
||||
.long sys_mlock /* 150 */
|
||||
.long sys_munlock
|
||||
.long sys_mlockall
|
||||
.long sys_munlockall
|
||||
.long sys_sched_setparam
|
||||
.long sys_sched_getparam /* 155 */
|
||||
.long sys_sched_setscheduler
|
||||
.long sys_sched_getscheduler
|
||||
.long sys_sched_yield
|
||||
.long sys_sched_get_priority_max
|
||||
.long sys_sched_get_priority_min /* 160 */
|
||||
.long sys_sched_rr_get_interval
|
||||
.long sys_nanosleep
|
||||
.long sys_mremap
|
||||
.long sys_setresuid
|
||||
.long sys_getresuid /* 165 */
|
||||
.long sys_ni_syscall /* old sys_query_module */
|
||||
.long sys_poll
|
||||
.long sys_nfsservctl
|
||||
.long sys_setresgid
|
||||
.long sys_getresgid /* 170 */
|
||||
.long sys_prctl
|
||||
.long sys_rt_sigreturn
|
||||
.long sys_rt_sigaction
|
||||
.long sys_rt_sigprocmask
|
||||
.long sys_rt_sigpending /* 175 */
|
||||
.long sys_rt_sigtimedwait
|
||||
.long sys_rt_sigqueueinfo
|
||||
.long sys_rt_sigsuspend
|
||||
.long sys_pread64
|
||||
.long sys_pwrite64 /* 180 */
|
||||
.long sys_chown
|
||||
.long sys_getcwd
|
||||
.long sys_capget
|
||||
.long sys_capset
|
||||
.long sys_sigaltstack /* 185 */
|
||||
.long sys_sendfile
|
||||
.long sys_ni_syscall /* streams1 */
|
||||
.long sys_ni_syscall /* streams2 */
|
||||
.long ppc_vfork
|
||||
.long sys_getrlimit /* 190 */
|
||||
.long sys_readahead
|
||||
.long sys_mmap2
|
||||
.long sys_truncate64
|
||||
.long sys_ftruncate64
|
||||
.long sys_stat64 /* 195 */
|
||||
.long sys_lstat64
|
||||
.long sys_fstat64
|
||||
.long sys_pciconfig_read
|
||||
.long sys_pciconfig_write
|
||||
.long sys_pciconfig_iobase /* 200 */
|
||||
.long sys_ni_syscall /* 201 - reserved - MacOnLinux - new */
|
||||
.long sys_getdents64
|
||||
.long sys_pivot_root
|
||||
.long sys_fcntl64
|
||||
.long sys_madvise /* 205 */
|
||||
.long sys_mincore
|
||||
.long sys_gettid
|
||||
.long sys_tkill
|
||||
.long sys_setxattr
|
||||
.long sys_lsetxattr /* 210 */
|
||||
.long sys_fsetxattr
|
||||
.long sys_getxattr
|
||||
.long sys_lgetxattr
|
||||
.long sys_fgetxattr
|
||||
.long sys_listxattr /* 215 */
|
||||
.long sys_llistxattr
|
||||
.long sys_flistxattr
|
||||
.long sys_removexattr
|
||||
.long sys_lremovexattr
|
||||
.long sys_fremovexattr /* 220 */
|
||||
.long sys_futex
|
||||
.long sys_sched_setaffinity
|
||||
.long sys_sched_getaffinity
|
||||
.long sys_ni_syscall
|
||||
.long sys_ni_syscall /* 225 - reserved for Tux */
|
||||
.long sys_sendfile64
|
||||
.long sys_io_setup
|
||||
.long sys_io_destroy
|
||||
.long sys_io_getevents
|
||||
.long sys_io_submit /* 230 */
|
||||
.long sys_io_cancel
|
||||
.long sys_set_tid_address
|
||||
.long sys_fadvise64
|
||||
.long sys_exit_group
|
||||
.long sys_lookup_dcookie /* 235 */
|
||||
.long sys_epoll_create
|
||||
.long sys_epoll_ctl
|
||||
.long sys_epoll_wait
|
||||
.long sys_remap_file_pages
|
||||
.long sys_timer_create /* 240 */
|
||||
.long sys_timer_settime
|
||||
.long sys_timer_gettime
|
||||
.long sys_timer_getoverrun
|
||||
.long sys_timer_delete
|
||||
.long sys_clock_settime /* 245 */
|
||||
.long sys_clock_gettime
|
||||
.long sys_clock_getres
|
||||
.long sys_clock_nanosleep
|
||||
.long sys_swapcontext
|
||||
.long sys_tgkill /* 250 */
|
||||
.long sys_utimes
|
||||
.long sys_statfs64
|
||||
.long sys_fstatfs64
|
||||
.long ppc_fadvise64_64
|
||||
.long sys_ni_syscall /* 255 - rtas (used on ppc64) */
|
||||
.long sys_debug_setcontext
|
||||
.long sys_ni_syscall /* 257 reserved for vserver */
|
||||
.long sys_ni_syscall /* 258 reserved for new sys_remap_file_pages */
|
||||
.long sys_ni_syscall /* 259 reserved for new sys_mbind */
|
||||
.long sys_ni_syscall /* 260 reserved for new sys_get_mempolicy */
|
||||
.long sys_ni_syscall /* 261 reserved for new sys_set_mempolicy */
|
||||
.long sys_mq_open
|
||||
.long sys_mq_unlink
|
||||
.long sys_mq_timedsend
|
||||
.long sys_mq_timedreceive /* 265 */
|
||||
.long sys_mq_notify
|
||||
.long sys_mq_getsetattr
|
||||
.long sys_kexec_load
|
||||
.long sys_add_key
|
||||
.long sys_request_key /* 270 */
|
||||
.long sys_keyctl
|
||||
.long sys_waitid
|
||||
.long sys_ioprio_set
|
||||
.long sys_ioprio_get
|
||||
.long sys_inotify_init /* 275 */
|
||||
.long sys_inotify_add_watch
|
||||
.long sys_inotify_rm_watch
|
||||
|
@ -1,7 +1,7 @@
|
||||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.16-rc1
|
||||
# Thu Jan 19 10:58:53 2006
|
||||
# Linux kernel version: 2.6.16-rc2
|
||||
# Wed Feb 8 10:44:39 2006
|
||||
#
|
||||
CONFIG_MMU=y
|
||||
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
|
||||
@ -12,7 +12,6 @@ CONFIG_S390=y
|
||||
# Code maturity level options
|
||||
#
|
||||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_CLEAN_COMPILE=y
|
||||
CONFIG_LOCK_KERNEL=y
|
||||
CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||
|
||||
@ -154,6 +153,7 @@ CONFIG_NET=y
|
||||
#
|
||||
# Networking options
|
||||
#
|
||||
# CONFIG_NETDEBUG is not set
|
||||
CONFIG_PACKET=y
|
||||
# CONFIG_PACKET_MMAP is not set
|
||||
CONFIG_UNIX=y
|
||||
@ -607,6 +607,7 @@ CONFIG_MSDOS_PARTITION=y
|
||||
# Instrumentation Support
|
||||
#
|
||||
# CONFIG_PROFILING is not set
|
||||
# CONFIG_STATISTICS is not set
|
||||
|
||||
#
|
||||
# Kernel hacking
|
||||
@ -624,7 +625,7 @@ CONFIG_DEBUG_MUTEXES=y
|
||||
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
||||
# CONFIG_DEBUG_KOBJECT is not set
|
||||
# CONFIG_DEBUG_INFO is not set
|
||||
# CONFIG_DEBUG_FS is not set
|
||||
CONFIG_DEBUG_FS=y
|
||||
# CONFIG_DEBUG_VM is not set
|
||||
CONFIG_FORCED_INLINING=y
|
||||
# CONFIG_RCU_TORTURE_TEST is not set
|
||||
|
@ -905,6 +905,26 @@ asmlinkage long sys32_fstat64(unsigned long fd, struct stat64_emu31 __user * sta
|
||||
return ret;
|
||||
}
|
||||
|
||||
asmlinkage long sys32_fstatat(unsigned int dfd, char __user *filename,
|
||||
struct stat64_emu31 __user* statbuf, int flag)
|
||||
{
|
||||
struct kstat stat;
|
||||
int error = -EINVAL;
|
||||
|
||||
if ((flag & ~AT_SYMLINK_NOFOLLOW) != 0)
|
||||
goto out;
|
||||
|
||||
if (flag & AT_SYMLINK_NOFOLLOW)
|
||||
error = vfs_lstat_fd(dfd, filename, &stat);
|
||||
else
|
||||
error = vfs_stat_fd(dfd, filename, &stat);
|
||||
|
||||
if (!error)
|
||||
error = cp_stat64(statbuf, &stat);
|
||||
out:
|
||||
return error;
|
||||
}
|
||||
|
||||
/*
|
||||
* Linux/i386 didn't use to be able to handle more than
|
||||
* 4 system call parameters, so these system calls used a memory
|
||||
|
@ -195,9 +195,6 @@ sys32_sigaction(int sig, const struct old_sigaction32 __user *act,
|
||||
return ret;
|
||||
}
|
||||
|
||||
int
|
||||
do_sigaction(int sig, const struct k_sigaction *act, struct k_sigaction *oact);
|
||||
|
||||
asmlinkage long
|
||||
sys32_rt_sigaction(int sig, const struct sigaction32 __user *act,
|
||||
struct sigaction32 __user *oact, size_t sigsetsize)
|
||||
|
@ -1523,13 +1523,13 @@ compat_sys_futimesat_wrapper:
|
||||
llgtr %r4,%r4 # struct timeval *
|
||||
jg compat_sys_futimesat
|
||||
|
||||
.globl compat_sys_newfstatat_wrapper
|
||||
compat_sys_newfstatat_wrapper:
|
||||
.globl sys32_fstatat_wrapper
|
||||
sys32_fstatat_wrapper:
|
||||
llgfr %r2,%r2 # unsigned int
|
||||
llgtr %r3,%r3 # char *
|
||||
llgtr %r4,%r4 # struct stat *
|
||||
llgtr %r4,%r4 # struct stat64 *
|
||||
lgfr %r5,%r5 # int
|
||||
jg compat_sys_newfstatat
|
||||
jg sys32_fstatat
|
||||
|
||||
.globl sys_unlinkat_wrapper
|
||||
sys_unlinkat_wrapper:
|
||||
@ -1602,3 +1602,8 @@ compat_sys_ppoll_wrapper:
|
||||
llgtr %r5,%r5 # const sigset_t *
|
||||
llgfr %r6,%r6 # size_t
|
||||
jg compat_sys_ppoll
|
||||
|
||||
.globl sys_unshare_wrapper
|
||||
sys_unshare_wrapper:
|
||||
llgfr %r2,%r2 # unsigned long
|
||||
jg sys_unshare
|
||||
|
@ -12,15 +12,16 @@
|
||||
* on the S390 architecture.
|
||||
*/
|
||||
|
||||
#include <asm/cio.h>
|
||||
#include <asm/setup.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/kexec.h>
|
||||
#include <linux/delay.h>
|
||||
#include <asm/cio.h>
|
||||
#include <asm/setup.h>
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/pgalloc.h>
|
||||
#include <asm/system.h>
|
||||
#include <asm/smp.h>
|
||||
|
||||
static void kexec_halt_all_cpus(void *);
|
||||
|
||||
|
@ -52,7 +52,7 @@ extern volatile int __cpu_logical_map[];
|
||||
struct _lowcore *lowcore_ptr[NR_CPUS];
|
||||
|
||||
cpumask_t cpu_online_map;
|
||||
cpumask_t cpu_possible_map;
|
||||
cpumask_t cpu_possible_map = CPU_MASK_ALL;
|
||||
|
||||
static struct task_struct *current_set[NR_CPUS];
|
||||
|
||||
@ -514,9 +514,6 @@ __init smp_check_cpus(unsigned int max_cpus)
|
||||
num_cpus++;
|
||||
}
|
||||
|
||||
for (cpu = 1; cpu < max_cpus; cpu++)
|
||||
cpu_set(cpu, cpu_possible_map);
|
||||
|
||||
printk("Detected %d CPU's\n",(int) num_cpus);
|
||||
printk("Boot cpu address %2X\n", boot_cpu_addr);
|
||||
}
|
||||
@ -810,7 +807,6 @@ void __devinit smp_prepare_boot_cpu(void)
|
||||
|
||||
cpu_set(0, cpu_online_map);
|
||||
cpu_set(0, cpu_present_map);
|
||||
cpu_set(0, cpu_possible_map);
|
||||
S390_lowcore.percpu_offset = __per_cpu_offset[0];
|
||||
current_set[0] = current;
|
||||
}
|
||||
|
@ -301,7 +301,7 @@ SYSCALL(sys_mkdirat,sys_mkdirat,sys_mkdirat_wrapper)
|
||||
SYSCALL(sys_mknodat,sys_mknodat,sys_mknodat_wrapper) /* 290 */
|
||||
SYSCALL(sys_fchownat,sys_fchownat,sys_fchownat_wrapper)
|
||||
SYSCALL(sys_futimesat,sys_futimesat,compat_sys_futimesat_wrapper)
|
||||
SYSCALL(sys_newfstatat,sys_newfstatat,compat_sys_newfstatat_wrapper)
|
||||
SYSCALL(sys_fstatat64,sys_newfstatat,sys32_fstatat_wrapper)
|
||||
SYSCALL(sys_unlinkat,sys_unlinkat,sys_unlinkat_wrapper)
|
||||
SYSCALL(sys_renameat,sys_renameat,sys_renameat_wrapper) /* 295 */
|
||||
SYSCALL(sys_linkat,sys_linkat,sys_linkat_wrapper)
|
||||
@ -311,3 +311,4 @@ SYSCALL(sys_fchmodat,sys_fchmodat,sys_fchmodat_wrapper)
|
||||
SYSCALL(sys_faccessat,sys_faccessat,sys_faccessat_wrapper) /* 300 */
|
||||
SYSCALL(sys_pselect6,sys_pselect6,compat_sys_pselect6_wrapper)
|
||||
SYSCALL(sys_ppoll,sys_ppoll,compat_sys_ppoll_wrapper)
|
||||
SYSCALL(sys_unshare,sys_unshare,sys_unshare_wrapper)
|
||||
|
@ -30,7 +30,7 @@ void __delay(unsigned long loops)
|
||||
*/
|
||||
__asm__ __volatile__(
|
||||
"0: brct %0,0b"
|
||||
: /* no outputs */ : "r" (loops/2) );
|
||||
: /* no outputs */ : "r" ((loops/2) + 1));
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -76,7 +76,7 @@ sys_call_table:
|
||||
/*270*/ .long sys_io_submit, sys_io_cancel, sys_io_getevents, sys_mq_open, sys_mq_unlink
|
||||
/*275*/ .long sys_mq_timedsend, sys_mq_timedreceive, sys_mq_notify, sys_mq_getsetattr, sys_waitid
|
||||
/*280*/ .long sys_ni_syscall, sys_add_key, sys_request_key, sys_keyctl, sys_openat
|
||||
/*285*/ .long sys_mkdirat, sys_mknodat, sys_fchownat, sys_futimesat, sys_newfstatat
|
||||
/*285*/ .long sys_mkdirat, sys_mknodat, sys_fchownat, sys_futimesat, sys_fstatat64
|
||||
/*290*/ .long sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat
|
||||
/*295*/ .long sys_fchmodat, sys_faccessat, sys_pselect6, sys_ppoll, sys_unshare
|
||||
|
||||
|
@ -428,6 +428,27 @@ asmlinkage long compat_sys_fstat64(unsigned int fd,
|
||||
return error;
|
||||
}
|
||||
|
||||
asmlinkage long compat_sys_fstatat64(unsigned int dfd, char __user *filename,
|
||||
struct compat_stat64 __user * statbuf, int flag)
|
||||
{
|
||||
struct kstat stat;
|
||||
int error = -EINVAL;
|
||||
|
||||
if ((flag & ~AT_SYMLINK_NOFOLLOW) != 0)
|
||||
goto out;
|
||||
|
||||
if (flag & AT_SYMLINK_NOFOLLOW)
|
||||
error = vfs_lstat_fd(dfd, filename, &stat);
|
||||
else
|
||||
error = vfs_stat_fd(dfd, filename, &stat);
|
||||
|
||||
if (!error)
|
||||
error = cp_compat_stat64(&stat, statbuf);
|
||||
|
||||
out:
|
||||
return error;
|
||||
}
|
||||
|
||||
asmlinkage long compat_sys_sysfs(int option, u32 arg1, u32 arg2)
|
||||
{
|
||||
return sys_sysfs(option, arg1, arg2);
|
||||
|
@ -77,7 +77,7 @@ sys_call_table32:
|
||||
/*270*/ .word sys32_io_submit, sys_io_cancel, compat_sys_io_getevents, sys32_mq_open, sys_mq_unlink
|
||||
.word compat_sys_mq_timedsend, compat_sys_mq_timedreceive, compat_sys_mq_notify, compat_sys_mq_getsetattr, compat_sys_waitid
|
||||
/*280*/ .word sys_ni_syscall, sys_add_key, sys_request_key, sys_keyctl, compat_sys_openat
|
||||
.word sys_mkdirat, sys_mknodat, sys_fchownat, compat_sys_futimesat, compat_sys_newfstatat
|
||||
.word sys_mkdirat, sys_mknodat, sys_fchownat, compat_sys_futimesat, compat_sys_fstatat64
|
||||
/*285*/ .word sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat
|
||||
.word sys_fchmodat, sys_faccessat, compat_sys_pselect6, compat_sys_ppoll, sys_unshare
|
||||
|
||||
@ -146,7 +146,7 @@ sys_call_table:
|
||||
/*270*/ .word sys_io_submit, sys_io_cancel, sys_io_getevents, sys_mq_open, sys_mq_unlink
|
||||
.word sys_mq_timedsend, sys_mq_timedreceive, sys_mq_notify, sys_mq_getsetattr, sys_waitid
|
||||
/*280*/ .word sys_nis_syscall, sys_add_key, sys_request_key, sys_keyctl, sys_openat
|
||||
.word sys_mkdirat, sys_mknodat, sys_fchownat, sys_futimesat, sys_newfstatat
|
||||
.word sys_mkdirat, sys_mknodat, sys_fchownat, sys_futimesat, sys_fstatat64
|
||||
/*285*/ .word sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat
|
||||
.word sys_fchmodat, sys_faccessat, sys_pselect6, sys_ppoll, sys_unshare
|
||||
|
||||
|
@ -28,6 +28,10 @@ config GENERIC_IRQ_PROBE
|
||||
bool
|
||||
default y
|
||||
|
||||
config TIME_LOW_RES
|
||||
bool
|
||||
default y
|
||||
|
||||
# Turn off some random 386 crap that can affect device config
|
||||
config ISA
|
||||
bool
|
||||
|
@ -677,7 +677,7 @@ ia32_sys_call_table:
|
||||
.quad sys_mknodat
|
||||
.quad sys_fchownat
|
||||
.quad compat_sys_futimesat
|
||||
.quad compat_sys_newfstatat /* 300 */
|
||||
.quad sys32_fstatat /* 300 */
|
||||
.quad sys_unlinkat
|
||||
.quad sys_renameat
|
||||
.quad sys_linkat
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user