Age | Commit message (Collapse) | Author |
|
Brings down the CPI from ~1.5 to ~1.1.
Signed-off-by: Edgar Iglesias <Edgar.Iglesias@axis.com>
Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
|
|
Signed-off-by: Edgar Iglesias <Edgar.Iglesias@axis.com>
Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
|
|
The romfs should land after __init_end
Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
|
|
Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
|
|
Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
|
|
Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
|
|
We don't need to take the BKL here.
Also fixes compile error after last commit (smp_lock.h was not included)
Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
|
|
copy_to_user()/copy_from_user() must not be used with spinlocks held.
Move locks inside each case so we have better control of when the locks
are held.
Also, since we use spinlocks, we don't need to hold the BKL, so remove it.
Reported-by: Kulikov Vasiliy <segooon@gmail.com>
Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
|
|
Signed-off-by: Joe Perches <joe@perches.com>
Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
|
|
All these files use the big kernel lock in a trivial
way to serialize their private file operations,
typically resulting from an earlier semi-automatic
pushdown from VFS.
None of these drivers appears to want to lock against
other code, and they all use the BKL as the top-level
lock in their file operations, meaning that there
is no lock-order inversion problem.
Consequently, we can remove the BKL completely,
replacing it with a per-file mutex in every case.
Using a scripted approach means we can avoid
typos.
file=$1
name=$2
if grep -q lock_kernel ${file} ; then
if grep -q 'include.*linux.mutex.h' ${file} ; then
sed -i '/include.*<linux\/smp_lock.h>/d' ${file}
else
sed -i 's/include.*<linux\/smp_lock.h>.*$/include <linux\/mutex.h>/g' ${file}
fi
sed -i ${file} \
-e "/^#include.*linux.mutex.h/,$ {
1,/^\(static\|int\|long\)/ {
/^\(static\|int\|long\)/istatic DEFINE_MUTEX(${name}_mutex);
} }" \
-e "s/\(un\)*lock_kernel\>[ ]*()/mutex_\1lock(\&${name}_mutex)/g" \
-e '/[ ]*cycle_kernel_lock();/d'
else
sed -i -e '/include.*\<smp_lock.h\>/d' ${file} \
-e '/cycle_kernel_lock()/d'
fi
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
|
|
From: Frederic Weisbecker <fweisbec@gmail.com>
Pushdown the bkl to the remaining drivers using the
deprecated .ioctl.
Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: John Kacur <jkacur@redhat.com>
|
|
As explained in commit 1c0fe6e3bd, we want to call the architecture independent
oom killer when getting an unexplained OOM from handle_mm_fault, rather than
simply killing current.
Signed-off-by: Nick Piggin <npiggin@suse.de>
Acked-by: David Rientjes <rientjes@google.com>
Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
Signed-off-by: Mikael Starvik <starvik@axis.com>
|
|
GENERIC_TIME was not functional for CRIS, giving random backward
time jumps.
For CRISv32 implement a new clocksource using the free running counter
and ditch the arch_gettimeoffset.
The random time jumps still existed, but turned out to be the write_seqlock
which was missing around our do_timer() call.
So switch over to GENERIC_TIME using the clocksource for CRISv32.
CRISv10 doesn't have the free running counter needed for the
clocksource trick, but we can still use GENERIC_TIME with
arch_gettimeoffset.
Unfortunately, there were problems in using the prescaler register
to timer0 for the gettimeoffset calculation, so it is now ignored,
making our resolution worse by the tune of 40usec (0.4%) worst case.
At the same time, clean up some formatting and use NSEC_PER_SEC
instead of 1000000000.
Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
|
|
Now we use a memory address to store the debug port info, So we need
to read/write this address when we choose DEBUG_LL. When MMU isn't
enable(I.E. the begining part of init stage of the linux kernel boot),
we need to access physical address instead of virtual address,
otherwise the kernel will crash.
Signed-off-by: Jason Wang <jason77.wang@gmail.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
|
|
Kgdb uses brki r16, 0x18 instruction to call
low level _debug_exception function which save
current state to pt_regs and call microblaze_kgdb_break
function. _debug_exception should be called only from
the kernel space. User space calling is not supported
because user application debugging uses different handling.
pt_regs_to_gdb_regs loads additional special registers
which can't be changed
* Enable KGDB in Kconfig
* Remove ancient not-tested KGDB support
* Remove ancient _debug_exception code from entry.S
Only MMU KGDB support is supported.
Signed-off-by: Michal Simek <monstr@monstr.eu>
CC: Jason Wessel <jason.wessel@windriver.com>
CC: John Williams <john.williams@petalogix.com>
CC: Edgar E. Iglesias <edgar.iglesias@petalogix.com>
CC: linux-kernel@vger.kernel.org
Acked-by: Jason Wessel <jason.wessel@windriver.com>
|
|
This is the first patch which add support for
user application debugging through brki rX, 0x18 vector.
This patch has side effect which also remove security issue
to use brki rX, 0x18 to freeze kernel.
Support for old gdb support via priviledged exception
(brk r0, r0) is still there. It will be remove in future.
Signed-off-by: Michal Simek <monstr@monstr.eu>
|
|
We need to save instruction and the latest Microblaze shouldn't
have any problem with it.
Signed-off-by: Michal Simek <monstr@monstr.eu>
|
|
Syscall can be called only from userspace that's why
we don't need to check which space kernel come from.
Kernel syscall calling is not check and shouldn't come
throught this part of code.
Signed-off-by: Michal Simek <monstr@monstr.eu>
|
|
We can save one more instruction if PT_MODE is saved in delay slot
Signed-off-by: Michal Simek <monstr@monstr.eu>
|
|
Save instructions by using delay slot and
clear UMS only if kernel comes from user space.
Signed-off-by: Michal Simek <monstr@monstr.eu>
|
|
Saving some instructions. Clear VMS bit if kernel comes
from kernel space.
Signed-off-by: Michal Simek <monstr@monstr.eu>
|
|
Saving instructions by adding 2/3 addik instructions to one.
Signed-off-by: Michal Simek <monstr@monstr.eu>
|
|
Saving instruction with delay slot usage.
Signed-off-by: Michal Simek <monstr@monstr.eu>
|
|
This change save one instruction if kernel comes from kernel
space.
Signed-off-by: Michal Simek <monstr@monstr.eu>
|
|
Separate reg saving and mode setting.
Signed-off-by: Michal Simek <monstr@monstr.eu>
|
|
SAVE_STATE macro could be used by other rutines too.
Signed-off-by: Michal Simek <monstr@monstr.eu>
|
|
We are not working with values from MSR that's why
we can discard it and use r11 for different purpose without
saving/restoring.
Signed-off-by: Michal Simek <monstr@monstr.eu>
|
|
Remove set_vms because UMS is cleared and VMS is already setup.
Optimize function calling which save one additional instruction.
Signed-off-by: Michal Simek <monstr@monstr.eu>
|
|
VMS is always setup because VM mode was before
exception/syscall/interrupt. Kernel continues in kernel mode
that's why we have to clear UMS bit if kernel comes from
user space.
Signed-off-by: Michal Simek <monstr@monstr.eu>
|
|
PT_MODE stores information if kernel comes from user
or kernel space. If come from user space, PT_MODE
contains 0. If come from kernel store, PT_MODE contains
non zero value. We don't need to save value 1. I am using
r1 register which contains non zero value.
This change save one additional instruction.
Signed-off-by: Michal Simek <monstr@monstr.eu>
|
|
SAVE_STATE macro could be used for user_exception
or interrupt functions.
Signed-off-by: Michal Simek <monstr@monstr.eu>
|
|
We don't need to save r0 to PT_R0. It could be additional
operation.
Signed-off-by: Michal Simek <monstr@monstr.eu>
|
|
We don't need to save R11 register. There is easy way
to use only R1 which is saved and restore later.
Signed-off-by: Michal Simek <monstr@monstr.eu>
|
|
BIP is already setup.
Signed-off-by: Michal Simek <monstr@monstr.eu>
|
|
Keep together all arguments for send_sig function.
Move returning address to delay slot which is executed.
Remove additional send_sig loading. I am using IMM part of
rtbd instruction with r0.
old solution:
addik r11, r0, send_sig
rtbd r11, 0
nop
new solution:
rtbd r0, send_sig
nop
There is one instruction saving.
Signed-off-by: Michal Simek <monstr@monstr.eu>
|
|
It is necessary to setup BIP and EE and clear EIP
only for unaligned exception handler. The rest of
hw exception handlers don't require it.
HW exception occured and we are not in virtual mode.
That's why we can do operations protected by EIP.
Interrupt, next hw exception or syscall can't occur.
EIP is cleared by rted.
This change speedup page_fault hw exception handler
which is critical path.
There is also necessary to save R11 content before
flag setup for unaligned exception.
Signed-off-by: Michal Simek <monstr@monstr.eu>
|
|
la is translated to addik by toolchain.
Signed-off-by: Michal Simek <monstr@monstr.eu>
|
|
SAVE_STATE macro is used in hw exceptions high level handling
functions. Hw exception doesn't disable IRQ that's why we don't
need to reenable it.
Signed-off-by: Michal Simek <monstr@monstr.eu>
|
|
Remove code duplicity and move it to SAVE_STATE macro.
There is no impact on performance.
Signed-off-by: Michal Simek <monstr@monstr.eu>
|
|
We don't need to protect by BIP whole ret_from_trap/ret_from_exc code.
Only restoring from user/hw exception should be covered.
If BIP is setup, IRQ can't occur.
Signed-off-by: Michal Simek <monstr@monstr.eu>
|
|
There is a way howto remove Kernel Mode variable. It is easier
to parse UMS bit in MSR to find out if I come from kernel or user
space. Loading MSR content should be in one cycle and loading
PER_CPU variable depends on memory state.
Signed-off-by: Michal Simek <monstr@monstr.eu>
|
|
We can save two instruction when MSR_VMS and MSR_UMS
are setup in one instruction.
Signed-off-by: Michal Simek <monstr@monstr.eu>
|
|
Save and restore R3/R4 registers in macros. This change
help to cleanup entry.S.
In ret_from_trap function we are saving returning value from
syscall to pt_regs on stack that's why we don't need to save and
restore these values before kernel functions (schedule, do_signal).
Signed-off-by: Michal Simek <monstr@monstr.eu>
|
|
Jump behind macro. We don't want to execute nop instruction again.
Signed-off-by: Michal Simek <monstr@monstr.eu>
|
|
_start symbol stores physical address where kernel is.
Gdb uses this symbol for their purpose that's why
we have to rename it.
Signed-off-by: Michal Simek <monstr@monstr.eu>
|
|
Remove spaces and use tabs instead.
Signed-off-by: Michal Simek <monstr@monstr.eu>
|
|
Microblaze has only 11 pvr regs according manual.
Signed-off-by: Michal Simek <monstr@monstr.eu>
|
|
Lower shifting values ensure that shifted 32bit counter
value doesn't exceed 64bit cycle variable too fast.
Signed-off-by: Michal Simek <monstr@monstr.eu>
|
|
Microblaze has support for early printk. The second serial
driver (uart16550/8250) has no microblaze support for early
printk.
Signed-off-by: Michal Simek <monstr@monstr.eu>
|
|
HAVE_ARCH_PCI_SET_DMA_MASK was removed in 2.6.34 (no architecture has
the own implementation of pci_set_dma_mask).
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Signed-off-by: Michal Simek <monstr@monstr.eu>
|