* Re: [PATCH] per-cpu areas
[not found] <E17wsrr-0007bD-00@wagner.rustcorp.com.au>
@ 2002-02-12 4:58 ` Ravikiran G Thirumalai
2002-02-13 9:48 ` Rusty Russell
2002-02-19 2:05 ` Something Wrong with LKML ???? Zoran Davidovac
1 sibling, 1 reply; 5+ messages in thread
From: Ravikiran G Thirumalai @ 2002-02-12 4:58 UTC (permalink / raw)
To: Rusty Russell; +Cc: linux-kernel
> +static void __init setup_per_cpu_areas(void)
> +{
> + unsigned long size, i;
> + char *ptr;
> + /* Created by linker magic */
> + extern char __per_cpu_start[], __per_cpu_end[];
> +
> + /* Copy section for each CPU (we discard the original) */
> + size = ALIGN(__per_cpu_end - __per_cpu_start, SMP_CACHE_BYTES);
> + ptr = alloc_bootmem(size * NR_CPUS);
Would it be possible to free up NR_CPUS - smp_num_cpus worth of memory
after smp_init? ....
Regards,
Kiran
--
Ravikiran G Thirumalai <kiran@in.ibm.com>
Linux Technology Center, IBM Software Labs,
Bangalore.
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [PATCH] per-cpu areas
2002-02-12 4:58 ` [PATCH] per-cpu areas Ravikiran G Thirumalai
@ 2002-02-13 9:48 ` Rusty Russell
0 siblings, 0 replies; 5+ messages in thread
From: Rusty Russell @ 2002-02-13 9:48 UTC (permalink / raw)
To: Ravikiran G Thirumalai; +Cc: linux-kernel
In message <20020212102852.I32236@in.ibm.com> you write:
> > +static void __init setup_per_cpu_areas(void)
> > +{
> > + unsigned long size, i;
> > + char *ptr;
> > + /* Created by linker magic */
> > + extern char __per_cpu_start[], __per_cpu_end[];
> > +
> > + /* Copy section for each CPU (we discard the original) */
> > + size = ALIGN(__per_cpu_end - __per_cpu_start, SMP_CACHE_BYTES);
> > + ptr = alloc_bootmem(size * NR_CPUS);
>
> Would it be possible to free up NR_CPUS - smp_num_cpus worth of memory
> after smp_init? ....
Yes, but memory is cheap, and writing a special "partial free"
function for this is icky. Maybe in 2 years when the per-cpu area is
100MB. 8)
We're better off reducing NR_CPUs to the maxmimum possible value of
smp_num_cpus() on that machine, IMHO.
Rusty.
--
Anyone who quotes me in their sig is an idiot. -- Rusty Russell.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Something Wrong with LKML ????
[not found] <E17wsrr-0007bD-00@wagner.rustcorp.com.au>
2002-02-12 4:58 ` [PATCH] per-cpu areas Ravikiran G Thirumalai
@ 2002-02-19 2:05 ` Zoran Davidovac
2002-02-19 8:19 ` Matti Aarnio
1 sibling, 1 reply; 5+ messages in thread
From: Zoran Davidovac @ 2002-02-19 2:05 UTC (permalink / raw)
To: linux-kernel
>From Feb 13 09:23:09 until now Tue Feb 19 03:00:08 CET 2002
I did not get any mail from relay=vger.kernel.org [12.107.208.194]
something wrong ?
or am I unsubscribed of this list because
my mail box was off for few hours
during upgrade ?
please CC on mail I not sure I am on list.
Thank You,
Zoran
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: Something Wrong with LKML ????
2002-02-19 2:05 ` Something Wrong with LKML ???? Zoran Davidovac
@ 2002-02-19 8:19 ` Matti Aarnio
0 siblings, 0 replies; 5+ messages in thread
From: Matti Aarnio @ 2002-02-19 8:19 UTC (permalink / raw)
To: Zoran Davidovac; +Cc: linux-kernel
On Tue, Feb 19, 2002 at 03:05:48AM +0100, Zoran Davidovac wrote:
> Date: Tue, 19 Feb 2002 03:05:48 +0100
> From: Zoran Davidovac <zdavid@unicef.org.yu>
> To: linux-kernel@vger.kernel.org
> Subject: Something Wrong with LKML ????
>
> >From Feb 13 09:23:09 until now Tue Feb 19 03:00:08 CET 2002
> I did not get any mail from relay=vger.kernel.org [12.107.208.194]
>
> something wrong ?
> or am I unsubscribed of this list because
> my mail box was off for few hours
> during upgrade ?
Yes, sort of. We got a large bunch of "relaying denied"
bounces from your domain's backup MX server.
Use the tool: http://vger.kernel.org/mxverify.html
to see, how your email setup appears to the email senders.
> please CC on mail I not sure I am on list.
> Thank You,
> Zoran
/Matti Aarnio
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH] per-cpu areas
@ 2002-03-05 7:54 Rusty Russell
0 siblings, 0 replies; 5+ messages in thread
From: Rusty Russell @ 2002-03-05 7:54 UTC (permalink / raw)
To: torvalds; +Cc: linux-kernel
Linus, please apply (retransmit, neatened a little).
Thanks,
Rusty.
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.3/include/linux/smp.h working-2.5.3-percpu/include/linux/smp.h
--- linux-2.5.3/include/linux/smp.h Fri Feb 1 19:21:37 2002
+++ working-2.5.3-percpu/include/linux/smp.h Fri Feb 1 19:17:09 2002
@@ -11,6 +11,7 @@
#ifdef CONFIG_SMP
#include <linux/kernel.h>
+#include <linux/compiler.h>
#include <asm/smp.h>
/*
@@ -71,7 +72,17 @@
#define MSG_RESCHEDULE 0x0003 /* Reschedule request from master CPU*/
#define MSG_CALL_FUNCTION 0x0004 /* Call function on all other CPUs */
-#else
+#define __per_cpu_data __attribute__((section(".data.percpu")))
+
+#ifndef __HAVE_ARCH_PER_CPU
+extern unsigned long __per_cpu_offset[NR_CPUS];
+
+/* var is in discarded region: offset to particular copy we want */
+#define per_cpu(var, cpu) RELOC_HIDE(var, per_cpu_offset(cpu))
+
+#define this_cpu(var) per_cpu(var, smp_processor_id())
+#endif /* !__HAVE_ARCH_PER_CPU */
+#else /* !SMP */
/*
* These macros fold the SMP functionality into a single CPU system
@@ -88,6 +99,9 @@
#define cpu_online_map 1
static inline void smp_send_reschedule(int cpu) { }
static inline void smp_send_reschedule_all(void) { }
+#define __per_cpu_data
+#define per_cpu(var, cpu) var
+#define this_cpu(var) var
#endif
#endif
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.3/init/main.c working-2.5.3-percpu/init/main.c
--- linux-2.5.3/init/main.c Thu Jan 31 08:59:17 2002
+++ working-2.5.3-percpu/init/main.c Fri Feb 1 19:13:52 2002
@@ -272,8 +272,32 @@
#define smp_init() do { } while (0)
#endif
+static inline void setup_per_cpu_areas(void)
+{
+}
#else
+#ifndef __HAVE_ARCH_PER_CPU
+unsigned long __per_cpu_offset[NR_CPUS];
+
+static void __init setup_per_cpu_areas(void)
+{
+ unsigned long size, i;
+ char *ptr;
+ /* Created by linker magic */
+ extern char __per_cpu_start[], __per_cpu_end[];
+
+ /* Copy section for each CPU (we discard the original) */
+ size = ALIGN(__per_cpu_end - __per_cpu_start, SMP_CACHE_BYTES);
+ ptr = alloc_bootmem(size * NR_CPUS);
+
+ for (i = 0; i < NR_CPUS; i++, ptr += size) {
+ __per_cpu_offset[i] = ptr - __per_cpu_start;
+ memcpy(ptr, __per_cpu_start, size);
+ }
+}
+#endif /* !__HAVE_ARCH_PER_CPU */
+
/* Called by boot processor to activate the rest. */
static void __init smp_init(void)
{
@@ -316,6 +340,7 @@
lock_kernel();
printk(linux_banner);
setup_arch(&command_line);
+ setup_per_cpu_areas();
printk("Kernel command line: %s\n", saved_command_line);
parse_options(command_line);
trap_init();
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.3/include/linux/compiler.h working-2.5.3-percpu/include/linux/compiler.h
--- linux-2.5.3/include/linux/compiler.h Wed Sep 19 07:12:45 2001
+++ working-2.5.3-percpu/include/linux/compiler.h Fri Feb 1 09:46:02 2002
@@ -13,4 +13,11 @@
#define likely(x) __builtin_expect((x),1)
#define unlikely(x) __builtin_expect((x),0)
+/* This macro obfuscates arithmetic on a variable address so that gcc
+ shouldn't recognize the original var, and make assumptions about it */
+ strcpy(s, "xxx"+X) => memcpy(s, "xxx"+X, 4-X) */
+#define RELOC_HIDE(var, off) \
+ ({ __typeof__(&(var)) __ptr; \
+ __asm__ ("" : "=g"(__ptr) : "0"((void *)&(var) + (off))); \
+ *__ptr; })
#endif /* __LINUX_COMPILER_H */
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.3/include/linux/cache.h working-2.5.3-percpu/include/linux/cache.h
--- linux-2.5.3/include/linux/cache.h Fri Feb 1 19:21:37 2002
+++ working-2.5.3-percpu/include/linux/cache.h Fri Feb 1 19:17:09 2002
@@ -4,8 +4,10 @@
#include <linux/config.h>
#include <asm/cache.h>
+#define ALIGN(x,a) (((x)+(a)-1)&~((a)-1))
+
#ifndef L1_CACHE_ALIGN
-#define L1_CACHE_ALIGN(x) (((x)+(L1_CACHE_BYTES-1))&~(L1_CACHE_BYTES-1))
+#define L1_CACHE_ALIGN(x) ALIGN(x, L1_CACHE_BYTES)
#endif
#ifndef SMP_CACHE_BYTES
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.3/arch/i386/vmlinux.lds working-2.5.3-percpu/arch/i386/vmlinux.lds
--- linux-2.5.3/arch/i386/vmlinux.lds Thu Jan 31 08:58:52 2002
+++ working-2.5.3-percpu/arch/i386/vmlinux.lds Fri Feb 1 09:11:18 2002
@@ -58,6 +58,10 @@
*(.initcall7.init)
}
__initcall_end = .;
+ . = ALIGN(32);
+ __per_cpu_start = .;
+ .data.percpu : { *(.data.percpu) }
+ __per_cpu_end = .;
. = ALIGN(4096);
__init_end = .;
diff -urN -I \$.*\$ --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.5.3/arch/ppc/vmlinux.lds working-2.5.3-percpu/arch/ppc/vmlinux.lds
--- linux-2.5.3/arch/ppc/vmlinux.lds Thu Jan 31 08:58:55 2002
+++ working-2.5.3-percpu/arch/ppc/vmlinux.lds Fri Feb 1 09:11:18 2002
@@ -104,6 +104,10 @@
*(.initcall7.init)
}
__initcall_end = .;
+ . = ALIGN(32);
+ __per_cpu_start = .;
+ .data.percpu : { *(.data.percpu) }
+ __per_cpu_end = .;
. = ALIGN(4096);
__init_end = .;
--
Anyone who quotes me in their sig is an idiot. -- Rusty Russell.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2002-03-05 7:51 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <E17wsrr-0007bD-00@wagner.rustcorp.com.au>
2002-02-12 4:58 ` [PATCH] per-cpu areas Ravikiran G Thirumalai
2002-02-13 9:48 ` Rusty Russell
2002-02-19 2:05 ` Something Wrong with LKML ???? Zoran Davidovac
2002-02-19 8:19 ` Matti Aarnio
2002-03-05 7:54 [PATCH] per-cpu areas Rusty Russell
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.