Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 327641da authored by H. Peter Anvin's avatar H. Peter Anvin
Browse files

Merge branch 'core/percpu' into x86/paravirt

parents 1f4f9315 ef3892bd
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -954,14 +954,14 @@ elevator_allow_merge_fn called whenever the block layer determines
				results in some sort of conflict internally,
				this hook allows it to do that.

elevator_dispatch_fn		fills the dispatch queue with ready requests.
elevator_dispatch_fn*		fills the dispatch queue with ready requests.
				I/O schedulers are free to postpone requests by
				not filling the dispatch queue unless @force
				is non-zero.  Once dispatched, I/O schedulers
				are not allowed to manipulate the requests -
				they belong to generic dispatch queue.

elevator_add_req_fn		called to add a new request into the scheduler
elevator_add_req_fn*		called to add a new request into the scheduler

elevator_queue_empty_fn		returns true if the merge queue is empty.
				Drivers shouldn't use this, but rather check
@@ -991,7 +991,7 @@ elevator_activate_req_fn Called when device driver first sees a request.
elevator_deactivate_req_fn	Called when device driver decides to delay
				a request by requeueing it.

elevator_init_fn
elevator_init_fn*
elevator_exit_fn		Allocate and free any elevator specific storage
				for a queue.

+6 −19
Original line number Diff line number Diff line
@@ -2,13 +2,13 @@
IP-Aliasing:
============

IP-aliases are additional IP-addresses/masks hooked up to a base 
interface by adding a colon and a string when running ifconfig. 
This string is usually numeric, but this is not a must.

IP-Aliases are avail if CONFIG_INET (`standard' IPv4 networking) 
is configured in the kernel.
IP-aliases are an obsolete way to manage multiple IP-addresses/masks
per interface. Newer tools such as iproute2 support multiple
address/prefixes per interface, but aliases are still supported
for backwards compatibility.

An alias is formed by adding a colon and a string when running ifconfig.
This string is usually numeric, but this is not a must.

o Alias creation.
  Alias creation is done by 'magic' interface naming: eg. to create a
@@ -38,16 +38,3 @@ o Relationship with main device

  If the base device is shut down the added aliases will be deleted 
  too.


Contact
-------
Please finger or e-mail me:
   Juan Jose Ciarlante <jjciarla@raiz.uncu.edu.ar>

Updated by Erik Schoenfelder <schoenfr@gaertner.DE>

; local variables:
; mode: indented-text
; mode: auto-fill
; end:
+0 −2
Original line number Diff line number Diff line
@@ -2836,8 +2836,6 @@ S: Maintained
MAC80211
P:	Johannes Berg
M:	johannes@sipsolutions.net
P:	Michael Wu
M:	flamingice@sourmilk.net
L:	linux-wireless@vger.kernel.org
W:	http://linuxwireless.org/
T:	git kernel.org:/pub/scm/linux/kernel/git/linville/wireless-2.6.git
+2 −1
Original line number Diff line number Diff line
@@ -768,7 +768,8 @@ extern int sysenter_setup(void);
extern struct desc_ptr		early_gdt_descr;

extern void cpu_set_gdt(int);
extern void switch_to_new_gdt(void);
extern void switch_to_new_gdt(int);
extern void load_percpu_segment(int);
extern void cpu_init(void);

static inline unsigned long get_debugctlmsr(void)
+15 −10
Original line number Diff line number Diff line
@@ -253,23 +253,28 @@ static char __cpuinit *table_lookup_model(struct cpuinfo_x86 *c)

__u32 cleared_cpu_caps[NCAPINTS] __cpuinitdata;

void load_percpu_segment(int cpu)
{
#ifdef CONFIG_X86_32
	loadsegment(fs, __KERNEL_PERCPU);
#else
	loadsegment(gs, 0);
	wrmsrl(MSR_GS_BASE, (unsigned long)per_cpu(irq_stack_union.gs_base, cpu));
#endif
}

/* Current gdt points %fs at the "master" per-cpu area: after this,
 * it's on the real one. */
void switch_to_new_gdt(void)
void switch_to_new_gdt(int cpu)
{
	struct desc_ptr gdt_descr;
	int cpu = smp_processor_id();

	gdt_descr.address = (long)get_cpu_gdt_table(cpu);
	gdt_descr.size = GDT_SIZE - 1;
	load_gdt(&gdt_descr);
	/* Reload the per-cpu base */
#ifdef CONFIG_X86_32
	loadsegment(fs, __KERNEL_PERCPU);
#else
	loadsegment(gs, 0);
	wrmsrl(MSR_GS_BASE, (unsigned long)per_cpu(irq_stack_union.gs_base, cpu));
#endif

	load_percpu_segment(cpu);
}

static struct cpu_dev *cpu_devs[X86_VENDOR_NUM] = {};
@@ -993,7 +998,7 @@ void __cpuinit cpu_init(void)
	 * and set up the GDT descriptor:
	 */

	switch_to_new_gdt();
	switch_to_new_gdt(cpu);
	loadsegment(fs, 0);

	load_idt((const struct desc_ptr *)&idt_descr);
@@ -1098,7 +1103,7 @@ void __cpuinit cpu_init(void)
		clear_in_cr4(X86_CR4_VME|X86_CR4_PVI|X86_CR4_TSD|X86_CR4_DE);

	load_idt(&idt_descr);
	switch_to_new_gdt();
	switch_to_new_gdt(cpu);

	/*
	 * Set up and load the per-CPU TSS and LDT
Loading