mirror of
https://github.com/armbian/linux.git
synced 2026-01-06 10:13:00 -08:00
Merge branch 'master' into upstream-fixes
This commit is contained in:
2
CREDITS
2
CREDITS
@@ -3279,7 +3279,7 @@ S: Sevilla 41005
|
||||
S: Spain
|
||||
|
||||
N: Linus Torvalds
|
||||
E: torvalds@osdl.org
|
||||
E: torvalds@linux-foundation.org
|
||||
D: Original kernel hacker
|
||||
S: 12725 SW Millikan Way, Suite 400
|
||||
S: Beaverton, Oregon 97005
|
||||
|
||||
@@ -72,3 +72,7 @@ kernel patches.
|
||||
|
||||
If the new code is substantial, addition of subsystem-specific fault
|
||||
injection might be appropriate.
|
||||
|
||||
22: Newly-added code has been compiled with `gcc -W'. This will generate
|
||||
lots of noise, but is good for finding bugs like "warning: comparison
|
||||
between signed and unsigned".
|
||||
|
||||
@@ -134,9 +134,9 @@ Do not send more than 15 patches at once to the vger mailing lists!!!
|
||||
|
||||
|
||||
Linus Torvalds is the final arbiter of all changes accepted into the
|
||||
Linux kernel. His e-mail address is <torvalds@osdl.org>. He gets
|
||||
a lot of e-mail, so typically you should do your best to -avoid- sending
|
||||
him e-mail.
|
||||
Linux kernel. His e-mail address is <torvalds@linux-foundation.org>.
|
||||
He gets a lot of e-mail, so typically you should do your best to -avoid-
|
||||
sending him e-mail.
|
||||
|
||||
Patches which are bug fixes, are "obvious" changes, or similarly
|
||||
require little discussion should be sent or CC'd to Linus. Patches
|
||||
|
||||
@@ -318,3 +318,10 @@ Why: /proc/acpi/button has been replaced by events to the input layer
|
||||
Who: Len Brown <len.brown@intel.com>
|
||||
|
||||
---------------------------
|
||||
|
||||
What: JFFS (version 1)
|
||||
When: 2.6.21
|
||||
Why: Unmaintained for years, superceded by JFFS2 for years.
|
||||
Who: Jeff Garzik <jeff@garzik.org>
|
||||
|
||||
---------------------------
|
||||
|
||||
@@ -17,7 +17,7 @@ You can use common Linux commands, such as cp and scp, to copy the
|
||||
memory image to a dump file on the local disk, or across the network to
|
||||
a remote system.
|
||||
|
||||
Kdump and kexec are currently supported on the x86, x86_64, ppc64 and IA64
|
||||
Kdump and kexec are currently supported on the x86, x86_64, ppc64 and ia64
|
||||
architectures.
|
||||
|
||||
When the system kernel boots, it reserves a small section of memory for
|
||||
@@ -61,7 +61,12 @@ Install kexec-tools
|
||||
|
||||
2) Download the kexec-tools user-space package from the following URL:
|
||||
|
||||
http://www.kernel.org/pub/linux/kernel/people/horms/kexec-tools/kexec-tools-testing-20061214.tar.gz
|
||||
http://www.kernel.org/pub/linux/kernel/people/horms/kexec-tools/kexec-tools-testing.tar.gz
|
||||
|
||||
This is a symlink to the latest version, which at the time of writing is
|
||||
20061214, the only release of kexec-tools-testing so far. As other versions
|
||||
are made released, the older onese will remain available at
|
||||
http://www.kernel.org/pub/linux/kernel/people/horms/kexec-tools/
|
||||
|
||||
Note: Latest kexec-tools-testing git tree is available at
|
||||
|
||||
@@ -71,11 +76,11 @@ http://www.kernel.org/git/?p=linux/kernel/git/horms/kexec-tools-testing.git;a=su
|
||||
|
||||
3) Unpack the tarball with the tar command, as follows:
|
||||
|
||||
tar xvpzf kexec-tools-testing-20061214.tar.gz
|
||||
tar xvpzf kexec-tools-testing.tar.gz
|
||||
|
||||
4) Change to the kexec-tools-1.101 directory, as follows:
|
||||
4) Change to the kexec-tools directory, as follows:
|
||||
|
||||
cd kexec-tools-testing-20061214
|
||||
cd kexec-tools-testing-VERSION
|
||||
|
||||
5) Configure the package, as follows:
|
||||
|
||||
@@ -224,7 +229,23 @@ Dump-capture kernel config options (Arch Dependent, ppc64)
|
||||
|
||||
Dump-capture kernel config options (Arch Dependent, ia64)
|
||||
----------------------------------------------------------
|
||||
(To be filled)
|
||||
|
||||
- No specific options are required to create a dump-capture kernel
|
||||
for ia64, other than those specified in the arch idependent section
|
||||
above. This means that it is possible to use the system kernel
|
||||
as a dump-capture kernel if desired.
|
||||
|
||||
The crashkernel region can be automatically placed by the system
|
||||
kernel at run time. This is done by specifying the base address as 0,
|
||||
or omitting it all together.
|
||||
|
||||
crashkernel=256M@0
|
||||
or
|
||||
crashkernel=256M
|
||||
|
||||
If the start address is specified, note that the start address of the
|
||||
kernel will be aligned to 64Mb, so if the start address is not then
|
||||
any space below the alignment point will be wasted.
|
||||
|
||||
|
||||
Boot into System Kernel
|
||||
@@ -243,6 +264,10 @@ Boot into System Kernel
|
||||
|
||||
On ppc64, use "crashkernel=128M@32M".
|
||||
|
||||
On ia64, 256M@256M is a generous value that typically works.
|
||||
The region may be automatically placed on ia64, see the
|
||||
dump-capture kernel config option notes above.
|
||||
|
||||
Load the Dump-capture Kernel
|
||||
============================
|
||||
|
||||
@@ -261,7 +286,8 @@ For x86_64:
|
||||
For ppc64:
|
||||
- Use vmlinux
|
||||
For ia64:
|
||||
(To be filled)
|
||||
- Use vmlinux or vmlinuz.gz
|
||||
|
||||
|
||||
If you are using a uncompressed vmlinux image then use following command
|
||||
to load dump-capture kernel.
|
||||
@@ -277,18 +303,19 @@ to load dump-capture kernel.
|
||||
--initrd=<initrd-for-dump-capture-kernel> \
|
||||
--append="root=<root-dev> <arch-specific-options>"
|
||||
|
||||
Please note, that --args-linux does not need to be specified for ia64.
|
||||
It is planned to make this a no-op on that architecture, but for now
|
||||
it should be omitted
|
||||
|
||||
Following are the arch specific command line options to be used while
|
||||
loading dump-capture kernel.
|
||||
|
||||
For i386 and x86_64:
|
||||
For i386, x86_64 and ia64:
|
||||
"init 1 irqpoll maxcpus=1"
|
||||
|
||||
For ppc64:
|
||||
"init 1 maxcpus=1 noirqdistrib"
|
||||
|
||||
For IA64
|
||||
(To be filled)
|
||||
|
||||
|
||||
Notes on loading the dump-capture kernel:
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -21,7 +21,7 @@ difficult to maintain, add yourself with a patch if desired.
|
||||
Bill Ryder <bryder@sgi.com>
|
||||
Thomas Sailer <sailer@ife.ee.ethz.ch>
|
||||
Gregory P. Smith <greg@electricrain.com>
|
||||
Linus Torvalds <torvalds@osdl.org>
|
||||
Linus Torvalds <torvalds@linux-foundation.org>
|
||||
Roman Weissgaerber <weissg@vienna.at>
|
||||
<Kazuki.Yasumatsu@fujixerox.co.jp>
|
||||
|
||||
|
||||
@@ -1254,7 +1254,7 @@ S: Maintained
|
||||
|
||||
ETHERNET BRIDGE
|
||||
P: Stephen Hemminger
|
||||
M: shemminger@osdl.org
|
||||
M: shemminger@linux-foundation.org
|
||||
L: bridge@osdl.org
|
||||
W: http://bridge.sourceforge.net/
|
||||
S: Maintained
|
||||
@@ -2277,7 +2277,7 @@ S: Maintained
|
||||
|
||||
NETEM NETWORK EMULATOR
|
||||
P: Stephen Hemminger
|
||||
M: shemminger@osdl.org
|
||||
M: shemminger@linux-foundation.org
|
||||
L: netem@osdl.org
|
||||
S: Maintained
|
||||
|
||||
@@ -3081,7 +3081,7 @@ S: Maintained
|
||||
|
||||
SKGE, SKY2 10/100/1000 GIGABIT ETHERNET DRIVERS
|
||||
P: Stephen Hemminger
|
||||
M: shemminger@osdl.org
|
||||
M: shemminger@linux-foundation.org
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
|
||||
|
||||
4
README
4
README
@@ -278,8 +278,8 @@ IF SOMETHING GOES WRONG:
|
||||
the file MAINTAINERS to see if there is a particular person associated
|
||||
with the part of the kernel that you are having trouble with. If there
|
||||
isn't anyone listed there, then the second best thing is to mail
|
||||
them to me (torvalds@osdl.org), and possibly to any other relevant
|
||||
mailing-list or to the newsgroup.
|
||||
them to me (torvalds@linux-foundation.org), and possibly to any other
|
||||
relevant mailing-list or to the newsgroup.
|
||||
|
||||
- In all bug-reports, *please* tell what kernel you are talking about,
|
||||
how to duplicate the problem, and what your setup is (use your common
|
||||
|
||||
@@ -710,11 +710,8 @@ __cpuinit int init_gdt(int cpu, struct task_struct *idle)
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Common CPU init for both boot and secondary CPUs */
|
||||
static void __cpuinit _cpu_init(int cpu, struct task_struct *curr)
|
||||
void __cpuinit cpu_set_gdt(int cpu)
|
||||
{
|
||||
struct tss_struct * t = &per_cpu(init_tss, cpu);
|
||||
struct thread_struct *thread = &curr->thread;
|
||||
struct Xgt_desc_struct *cpu_gdt_descr = &per_cpu(cpu_gdt_descr, cpu);
|
||||
|
||||
/* Reinit these anyway, even if they've already been done (on
|
||||
@@ -722,6 +719,13 @@ static void __cpuinit _cpu_init(int cpu, struct task_struct *curr)
|
||||
the real ones). */
|
||||
load_gdt(cpu_gdt_descr);
|
||||
set_kernel_gs();
|
||||
}
|
||||
|
||||
/* Common CPU init for both boot and secondary CPUs */
|
||||
static void __cpuinit _cpu_init(int cpu, struct task_struct *curr)
|
||||
{
|
||||
struct tss_struct * t = &per_cpu(init_tss, cpu);
|
||||
struct thread_struct *thread = &curr->thread;
|
||||
|
||||
if (cpu_test_and_set(cpu, cpu_initialized)) {
|
||||
printk(KERN_WARNING "CPU#%d already initialized!\n", cpu);
|
||||
@@ -807,6 +811,7 @@ void __cpuinit cpu_init(void)
|
||||
local_irq_enable();
|
||||
}
|
||||
|
||||
cpu_set_gdt(cpu);
|
||||
_cpu_init(cpu, curr);
|
||||
}
|
||||
|
||||
|
||||
@@ -310,13 +310,7 @@ static int __init setup_nmi_watchdog(char *str)
|
||||
|
||||
if ((nmi >= NMI_INVALID) || (nmi < NMI_NONE))
|
||||
return 0;
|
||||
/*
|
||||
* If any other x86 CPU has a local APIC, then
|
||||
* please test the NMI stuff there and send me the
|
||||
* missing bits. Right now Intel P6/P4 and AMD K7 only.
|
||||
*/
|
||||
if ((nmi == NMI_LOCAL_APIC) && (nmi_known_cpu() == 0))
|
||||
return 0; /* no lapic support */
|
||||
|
||||
nmi_watchdog = nmi;
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -566,4 +566,11 @@ struct paravirt_ops paravirt_ops = {
|
||||
.irq_enable_sysexit = native_irq_enable_sysexit,
|
||||
.iret = native_iret,
|
||||
};
|
||||
EXPORT_SYMBOL(paravirt_ops);
|
||||
|
||||
/*
|
||||
* NOTE: CONFIG_PARAVIRT is experimental and the paravirt_ops
|
||||
* semantics are subject to change. Hence we only do this
|
||||
* internal-only export of this, until it gets sorted out and
|
||||
* all lowlevel CPU ops used by modules are separately exported.
|
||||
*/
|
||||
EXPORT_SYMBOL_GPL(paravirt_ops);
|
||||
|
||||
@@ -595,6 +595,12 @@ static void __cpuinit start_secondary(void *unused)
|
||||
*/
|
||||
void __devinit initialize_secondary(void)
|
||||
{
|
||||
/*
|
||||
* switch to the per CPU GDT we already set up
|
||||
* in do_boot_cpu()
|
||||
*/
|
||||
cpu_set_gdt(current_thread_info()->cpu);
|
||||
|
||||
/*
|
||||
* We don't actually need to load the full TSS,
|
||||
* basically just the stack pointer and the eip.
|
||||
@@ -972,9 +978,6 @@ static int __cpuinit do_boot_cpu(int apicid, int cpu)
|
||||
/* Stack for startup_32 can be just as for start_secondary onwards */
|
||||
stack_start.esp = (void *) idle->thread.esp;
|
||||
|
||||
start_pda = cpu_pda(cpu);
|
||||
cpu_gdt_descr = per_cpu(cpu_gdt_descr, cpu);
|
||||
|
||||
irq_ctx_init(cpu);
|
||||
|
||||
x86_cpu_to_apicid[cpu] = apicid;
|
||||
|
||||
@@ -772,6 +772,12 @@ initialize_secondary(void)
|
||||
set_current(hard_get_current());
|
||||
#endif
|
||||
|
||||
/*
|
||||
* switch to the per CPU GDT we already set up
|
||||
* in do_boot_cpu()
|
||||
*/
|
||||
cpu_set_gdt(current_thread_info()->cpu);
|
||||
|
||||
/*
|
||||
* We don't actually need to load the full TSS,
|
||||
* basically just the stack pointer and the eip.
|
||||
|
||||
@@ -1568,6 +1568,20 @@ config MIPS_MT_FPAFF
|
||||
depends on MIPS_MT
|
||||
default y
|
||||
|
||||
config MIPS_MT_SMTC_INSTANT_REPLAY
|
||||
bool "Low-latency Dispatch of Deferred SMTC IPIs"
|
||||
depends on MIPS_MT_SMTC
|
||||
default y
|
||||
help
|
||||
SMTC pseudo-interrupts between TCs are deferred and queued
|
||||
if the target TC is interrupt-inhibited (IXMT). In the first
|
||||
SMTC prototypes, these queued IPIs were serviced on return
|
||||
to user mode, or on entry into the kernel idle loop. The
|
||||
INSTANT_REPLAY option dispatches them as part of local_irq_restore()
|
||||
processing, which adds runtime overhead (hence the option to turn
|
||||
it off), but ensures that IPIs are handled promptly even under
|
||||
heavy I/O interrupt load.
|
||||
|
||||
config MIPS_VPE_LOADER_TOM
|
||||
bool "Load VPE program into memory hidden from linux"
|
||||
depends on MIPS_VPE_LOADER
|
||||
|
||||
@@ -1017,6 +1017,33 @@ void setup_cross_vpe_interrupts(void)
|
||||
* SMTC-specific hacks invoked from elsewhere in the kernel.
|
||||
*/
|
||||
|
||||
void smtc_ipi_replay(void)
|
||||
{
|
||||
/*
|
||||
* To the extent that we've ever turned interrupts off,
|
||||
* we may have accumulated deferred IPIs. This is subtle.
|
||||
* If we use the smtc_ipi_qdepth() macro, we'll get an
|
||||
* exact number - but we'll also disable interrupts
|
||||
* and create a window of failure where a new IPI gets
|
||||
* queued after we test the depth but before we re-enable
|
||||
* interrupts. So long as IXMT never gets set, however,
|
||||
* we should be OK: If we pick up something and dispatch
|
||||
* it here, that's great. If we see nothing, but concurrent
|
||||
* with this operation, another TC sends us an IPI, IXMT
|
||||
* is clear, and we'll handle it as a real pseudo-interrupt
|
||||
* and not a pseudo-pseudo interrupt.
|
||||
*/
|
||||
if (IPIQ[smp_processor_id()].depth > 0) {
|
||||
struct smtc_ipi *pipi;
|
||||
extern void self_ipi(struct smtc_ipi *);
|
||||
|
||||
while ((pipi = smtc_ipi_dq(&IPIQ[smp_processor_id()]))) {
|
||||
self_ipi(pipi);
|
||||
smtc_cpu_stats[smp_processor_id()].selfipis++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void smtc_idle_loop_hook(void)
|
||||
{
|
||||
#ifdef SMTC_IDLE_HOOK_DEBUG
|
||||
@@ -1113,29 +1140,14 @@ void smtc_idle_loop_hook(void)
|
||||
if (pdb_msg != &id_ho_db_msg[0])
|
||||
printk("CPU%d: %s", smp_processor_id(), id_ho_db_msg);
|
||||
#endif /* SMTC_IDLE_HOOK_DEBUG */
|
||||
/*
|
||||
* To the extent that we've ever turned interrupts off,
|
||||
* we may have accumulated deferred IPIs. This is subtle.
|
||||
* If we use the smtc_ipi_qdepth() macro, we'll get an
|
||||
* exact number - but we'll also disable interrupts
|
||||
* and create a window of failure where a new IPI gets
|
||||
* queued after we test the depth but before we re-enable
|
||||
* interrupts. So long as IXMT never gets set, however,
|
||||
* we should be OK: If we pick up something and dispatch
|
||||
* it here, that's great. If we see nothing, but concurrent
|
||||
* with this operation, another TC sends us an IPI, IXMT
|
||||
* is clear, and we'll handle it as a real pseudo-interrupt
|
||||
* and not a pseudo-pseudo interrupt.
|
||||
*/
|
||||
if (IPIQ[smp_processor_id()].depth > 0) {
|
||||
struct smtc_ipi *pipi;
|
||||
extern void self_ipi(struct smtc_ipi *);
|
||||
|
||||
if ((pipi = smtc_ipi_dq(&IPIQ[smp_processor_id()])) != NULL) {
|
||||
self_ipi(pipi);
|
||||
smtc_cpu_stats[smp_processor_id()].selfipis++;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Replay any accumulated deferred IPIs. If "Instant Replay"
|
||||
* is in use, there should never be any.
|
||||
*/
|
||||
#ifndef CONFIG_MIPS_MT_SMTC_INSTANT_REPLAY
|
||||
smtc_ipi_replay();
|
||||
#endif /* CONFIG_MIPS_MT_SMTC_INSTANT_REPLAY */
|
||||
}
|
||||
|
||||
void smtc_soft_dump(void)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Interrupt handing routines for NEC VR4100 series.
|
||||
*
|
||||
* Copyright (C) 2005 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp>
|
||||
* Copyright (C) 2005-2007 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -73,13 +73,19 @@ static void irq_dispatch(unsigned int irq)
|
||||
if (cascade->get_irq != NULL) {
|
||||
unsigned int source_irq = irq;
|
||||
desc = irq_desc + source_irq;
|
||||
desc->chip->ack(source_irq);
|
||||
if (desc->chip->mask_ack)
|
||||
desc->chip->mask_ack(source_irq);
|
||||
else {
|
||||
desc->chip->mask(source_irq);
|
||||
desc->chip->ack(source_irq);
|
||||
}
|
||||
irq = cascade->get_irq(irq);
|
||||
if (irq < 0)
|
||||
atomic_inc(&irq_err_count);
|
||||
else
|
||||
irq_dispatch(irq);
|
||||
desc->chip->end(source_irq);
|
||||
if (!(desc->status & IRQ_DISABLED) && desc->chip->unmask)
|
||||
desc->chip->unmask(source_irq);
|
||||
} else
|
||||
do_IRQ(irq);
|
||||
}
|
||||
|
||||
@@ -358,13 +358,12 @@ ev64360_setup_mtd(void)
|
||||
|
||||
ptbl_entries = 3;
|
||||
|
||||
if ((ptbl = kmalloc(ptbl_entries * sizeof(struct mtd_partition),
|
||||
if ((ptbl = kzalloc(ptbl_entries * sizeof(struct mtd_partition),
|
||||
GFP_KERNEL)) == NULL) {
|
||||
|
||||
printk(KERN_WARNING "Can't alloc MTD partition table\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
memset(ptbl, 0, ptbl_entries * sizeof(struct mtd_partition));
|
||||
|
||||
ptbl[0].name = "reserved";
|
||||
ptbl[0].offset = 0;
|
||||
|
||||
@@ -302,8 +302,6 @@ int __init setup_nmi_watchdog(char *str)
|
||||
if ((nmi >= NMI_INVALID) || (nmi < NMI_NONE))
|
||||
return 0;
|
||||
|
||||
if ((nmi == NMI_LOCAL_APIC) && (nmi_known_cpu() == 0))
|
||||
return 0; /* no lapic support */
|
||||
nmi_watchdog = nmi;
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -590,6 +590,12 @@ void elv_insert(request_queue_t *q, struct request *rq, int where)
|
||||
*/
|
||||
rq->cmd_flags |= REQ_SOFTBARRIER;
|
||||
|
||||
/*
|
||||
* Most requeues happen because of a busy condition,
|
||||
* don't force unplug of the queue for that case.
|
||||
*/
|
||||
unplug_it = 0;
|
||||
|
||||
if (q->ordseq == 0) {
|
||||
list_add(&rq->queuelist, &q->queue_head);
|
||||
break;
|
||||
@@ -604,11 +610,6 @@ void elv_insert(request_queue_t *q, struct request *rq, int where)
|
||||
}
|
||||
|
||||
list_add_tail(&rq->queuelist, pos);
|
||||
/*
|
||||
* most requeues happen because of a busy condition, don't
|
||||
* force unplug of the queue for that case.
|
||||
*/
|
||||
unplug_it = 0;
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user