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 Original line 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,
				results in some sort of conflict internally,
				this hook allows it to do that.
				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
				I/O schedulers are free to postpone requests by
				not filling the dispatch queue unless @force
				not filling the dispatch queue unless @force
				is non-zero.  Once dispatched, I/O schedulers
				is non-zero.  Once dispatched, I/O schedulers
				are not allowed to manipulate the requests -
				are not allowed to manipulate the requests -
				they belong to generic dispatch queue.
				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.
elevator_queue_empty_fn		returns true if the merge queue is empty.
				Drivers shouldn't use this, but rather check
				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
elevator_deactivate_req_fn	Called when device driver decides to delay
				a request by requeueing it.
				a request by requeueing it.


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


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


IP-aliases are additional IP-addresses/masks hooked up to a base 
IP-aliases are an obsolete way to manage multiple IP-addresses/masks
interface by adding a colon and a string when running ifconfig. 
per interface. Newer tools such as iproute2 support multiple
This string is usually numeric, but this is not a must.
address/prefixes per interface, but aliases are still supported

for backwards compatibility.
IP-Aliases are avail if CONFIG_INET (`standard' IPv4 networking) 
is configured in the kernel.


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.
o Alias creation.
  Alias creation is done by 'magic' interface naming: eg. to create a
  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 
  If the base device is shut down the added aliases will be deleted 
  too.
  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 Original line Diff line number Diff line
@@ -2836,8 +2836,6 @@ S: Maintained
MAC80211
MAC80211
P:	Johannes Berg
P:	Johannes Berg
M:	johannes@sipsolutions.net
M:	johannes@sipsolutions.net
P:	Michael Wu
M:	flamingice@sourmilk.net
L:	linux-wireless@vger.kernel.org
L:	linux-wireless@vger.kernel.org
W:	http://linuxwireless.org/
W:	http://linuxwireless.org/
T:	git kernel.org:/pub/scm/linux/kernel/git/linville/wireless-2.6.git
T:	git kernel.org:/pub/scm/linux/kernel/git/linville/wireless-2.6.git
+2 −1
Original line number Original line Diff line number Diff line
@@ -768,7 +768,8 @@ extern int sysenter_setup(void);
extern struct desc_ptr		early_gdt_descr;
extern struct desc_ptr		early_gdt_descr;


extern void cpu_set_gdt(int);
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);
extern void cpu_init(void);


static inline unsigned long get_debugctlmsr(void)
static inline unsigned long get_debugctlmsr(void)
+15 −10
Original line number Original line 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;
__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,
/* Current gdt points %fs at the "master" per-cpu area: after this,
 * it's on the real one. */
 * it's on the real one. */
void switch_to_new_gdt(void)
void switch_to_new_gdt(int cpu)
{
{
	struct desc_ptr gdt_descr;
	struct desc_ptr gdt_descr;
	int cpu = smp_processor_id();


	gdt_descr.address = (long)get_cpu_gdt_table(cpu);
	gdt_descr.address = (long)get_cpu_gdt_table(cpu);
	gdt_descr.size = GDT_SIZE - 1;
	gdt_descr.size = GDT_SIZE - 1;
	load_gdt(&gdt_descr);
	load_gdt(&gdt_descr);
	/* Reload the per-cpu base */
	/* Reload the per-cpu base */
#ifdef CONFIG_X86_32

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


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


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


	load_idt((const struct desc_ptr *)&idt_descr);
	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);
		clear_in_cr4(X86_CR4_VME|X86_CR4_PVI|X86_CR4_TSD|X86_CR4_DE);


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


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