Skip to contentSkip to conversation

x86: Define early read-mostly per-cpu macros

PATCH Superseded Vlad Zolotarov 2 participants 5 messages May 20, 2012 – May 21, 2012

Subsystems (2)

v3 of 5 Superseded Latest is v5 →

lore
Share & tools
lore
#0 lore raw

PATCH v3 1/2 x86: Define early read-mostly per-cpu macros

Some read-mostly per-cpu data may need to be declared or defined early, so it can be initialized and accessed before per_cpu areas are allocated.

Only the data that resides in the per_cpu areas should be read-mostly, as there is little benefit in optimizing cache lines on initialization.

---
 arch/x86/include/asm/percpu.h |   17 +++++++++++++++++
 1 files changed, 17 insertions(+), 0 deletions(-)
arch/x86/include/asm/percpu.h +17 -0
index 7a11910..8b5c8e0 100644
@@ -555,6 +555,12 @@ DECLARE_PER_CPU(unsigned long, this_cpu_off);
 				{ [0 ... NR_CPUS-1] = _initvalue };	\
 	__typeof__(_type) *_name##_early_ptr __refdata = _name##_early_map
 
+#define DEFINE_EARLY_PER_CPU_READ_MOSTLY(_type, _name, _initvalue)	\
+	DEFINE_PER_CPU_READ_MOSTLY(_type, _name) = _initvalue;		\
+	__typeof__(_type) _name##_early_map[NR_CPUS] __initdata =	\
+				{ [0 ... NR_CPUS-1] = _initvalue };	\
+	__typeof__(_type) *_name##_early_ptr __refdata = _name##_early_map
+
 #define EXPORT_EARLY_PER_CPU_SYMBOL(_name)			\
 	EXPORT_PER_CPU_SYMBOL(_name)
 
@@ -563,6 +569,11 @@ DECLARE_PER_CPU(unsigned long, this_cpu_off);
 	extern __typeof__(_type) *_name##_early_ptr;		\
 	extern __typeof__(_type)  _name##_early_map[]
 
+#define DECLARE_EARLY_PER_CPU_READ_MOSTLY(_type, _name)		\
+	DECLARE_PER_CPU_READ_MOSTLY(_type, _name);		\
+	extern __typeof__(_type) *_name##_early_ptr;		\
+	extern __typeof__(_type)  _name##_early_map[]
+
 #define	early_per_cpu_ptr(_name) (_name##_early_ptr)
 #define	early_per_cpu_map(_name, _idx) (_name##_early_map[_idx])
 #define	early_per_cpu(_name, _cpu) 				\
@@ -574,12 +585,18 @@ DECLARE_PER_CPU(unsigned long, this_cpu_off);
 #define	DEFINE_EARLY_PER_CPU(_type, _name, _initvalue)		\
 	DEFINE_PER_CPU(_type, _name) = _initvalue
 
+#define DEFINE_EARLY_PER_CPU_READ_MOSTLY(_type, _name, _initvalue)	\
+	DEFINE_PER_CPU_READ_MOSTLY(_type, _name) = _initvalue
+
 #define EXPORT_EARLY_PER_CPU_SYMBOL(_name)			\
 	EXPORT_PER_CPU_SYMBOL(_name)
 
 #define DECLARE_EARLY_PER_CPU(_type, _name)			\
 	DECLARE_PER_CPU(_type, _name)
 
+#define DECLARE_EARLY_PER_CPU_READ_MOSTLY(_type, _name)		\
+	DECLARE_PER_CPU_READ_MOSTLY(_type, _name)
+
 #define	early_per_cpu(_name, _cpu) per_cpu(_name, _cpu)
 #define	early_per_cpu_ptr(_name) NULL
 /* no early_per_cpu_map() */
Signature · 1 line
1.7.5.4
#1 lore raw
Quoted 10 lines · Vlad Zolotarov

Some read-mostly per-cpu data may need to be declared or defined early, so it can be initialized and accessed before per_cpu areas are allocated.

Only the data that resides in the per_cpu areas should be read-mostly, as there is little benefit in optimizing cache lines on initialization.

That's not a valid signoff chain. If you send me a patch then you should be the last SOB - but as the author you should be the first SOB as well. I edited the two SOBs to be Acked-by's.

Thanks,

Ingo

#2 lore raw
Quoted 8 lines · Ingo Molnar
Quoted 7 lines · Vlad Zolotarov

Some read-mostly per-cpu data may need to be declared or defined early, so it can be initialized and accessed before per_cpu areas are allocated.

Only the data that resides in the per_cpu areas should be read-mostly, as there is little benefit in optimizing cache lines on initialization.

Quoted 7 lines
Quoted 3 lines

That's not a valid signoff chain. If you send me a patch then you should be the last SOB - but as the author you should be the first SOB as well. I edited the two SOBs to be Acked-by's.

Thanks, Ingo. I understand. However the "history" of this patch is not as simple as u represent. ;)

It was originally written by Ido and I just posted it (then I put my SOB at the end of SOB list). But after u noted that it didn't compile on !SMP i reworked it but yet Ido did at least half of the coding, so I put my SOB at the first place (as I was the last one writing the code) and then Ido's as he actually wrote the code in this patch as well and I do wanted to give him a credit.

Do u still think changing his (Ido's) SOB to Acked-by was the right thing to do?

Thanks,
vlad

Quoted 4 lines

Thanks,

Ingo

#3 lore raw
Quoted 20 lines · Vlad Zolotarov
Quoted 8 lines · Ingo Molnar
Quoted 7 lines · Vlad Zolotarov

Some read-mostly per-cpu data may need to be declared or defined early, so it can be initialized and accessed before per_cpu areas are allocated.

Only the data that resides in the per_cpu areas should be read-mostly, as there is little benefit in optimizing cache lines on initialization.

Quoted 7 lines
Quoted 3 lines

That's not a valid signoff chain. If you send me a patch then you should be the last SOB - but as the author you should be the first SOB as well. I edited the two SOBs to be Acked-by's.

Thanks, Ingo. I understand. However the "history" of this patch is not as simple as u represent. ;)

Quoted 7 lines

It was originally written by Ido and I just posted it (then I put my SOB at the end of SOB list). But after u noted that it didn't compile on !SMP i reworked it but yet Ido did at least half of the coding, so I put my SOB at the first place (as I was the last one writing the code) and then Ido's as he actually wrote the code in this patch as well and I do wanted to give him a credit.

The proper way to do that is to add a "Originally-From: " tag, or to keep him as the author (and first SOB) and desccribe your own changes as comments between the SOBs:

Signed-off-by Original Author
[ cleaned up the code a bit ]
Signed-off-by Second Author
[ restructured it ]
Signed-off-by You
Quoted 2 lines

Do u still think changing his (Ido's) SOB to Acked-by was the right thing to do?

If they agree with it then you can send it to me that way - or the above way, or you can add any extra authors in a copyright notice - but the signoff chain should be a chain, with the primary author as the first SOB and the person sending me the patch being the last SOB.

Thanks,

Ingo

#4 lore raw
Quoted 22 lines
Quoted 11 lines

Thanks, Ingo. I understand. However the "history" of this patch is not as simple as u represent. ;)

It was originally written by Ido and I just posted it (then I put my SOB at the end of SOB list). But after u noted that it didn't compile on !SMP i reworked it but yet Ido did at least half of the coding, so I put my SOB at the first place (as I was the last one writing the code) and then Ido's as he actually wrote the code in this patch as well and I do wanted to give him a credit.

The proper way to do that is to add a "Originally-From: " tag, or to keep him as the author (and first SOB) and desccribe your own changes as comments between the SOBs:

Signed-off-by Original Author
[ cleaned up the code a bit ]
Signed-off-by Second Author
[ restructured it ]
Signed-off-by You
Quoted 8 lines
Quoted 2 lines

Do u still think changing his (Ido's) SOB to Acked-by was the right thing to do?

If they agree with it then you can send it to me that way - or the above way, or you can add any extra authors in a copyright notice - but the signoff chain should be a chain, with the primary author as the first SOB and the person sending me the patch being the last SOB.

Got it. I think the "above" way would describe the reality in the most exact manner and would give the credit in the most exact manner.

I'd like to respin the series if it's still possible. Pls., let me know.

thanks,
vlad

Quoted 4 lines

Thanks,

Ingo