Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci
Commits
d369ddd2
Commit
d369ddd2
authored
Jul 10, 2005
by
David S. Miller
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[SPARC64]: Add __read_mostly support.
Signed-off-by:
David S. Miller
<
davem@davemloft.net
>
parent
9126dfde
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
17 additions
and
21 deletions
+17
-21
arch/sparc64/kernel/smp.c
arch/sparc64/kernel/smp.c
+5
-5
arch/sparc64/kernel/time.c
arch/sparc64/kernel/time.c
+9
-15
arch/sparc64/kernel/vmlinux.lds.S
arch/sparc64/kernel/vmlinux.lds.S
+2
-0
include/linux/cache.h
include/linux/cache.h
+1
-1
No files found.
arch/sparc64/kernel/smp.c
View file @
d369ddd2
...
@@ -45,8 +45,8 @@ extern void calibrate_delay(void);
...
@@ -45,8 +45,8 @@ extern void calibrate_delay(void);
/* Please don't make this stuff initdata!!! --DaveM */
/* Please don't make this stuff initdata!!! --DaveM */
static
unsigned
char
boot_cpu_id
;
static
unsigned
char
boot_cpu_id
;
cpumask_t
cpu_online_map
=
CPU_MASK_NONE
;
cpumask_t
cpu_online_map
=
CPU_MASK_NONE
__read_mostly
;
cpumask_t
phys_cpu_present_map
=
CPU_MASK_NONE
;
cpumask_t
phys_cpu_present_map
=
CPU_MASK_NONE
__read_mostly
;
static
cpumask_t
smp_commenced_mask
;
static
cpumask_t
smp_commenced_mask
;
static
cpumask_t
cpu_callout_map
;
static
cpumask_t
cpu_callout_map
;
...
@@ -155,7 +155,7 @@ void cpu_panic(void)
...
@@ -155,7 +155,7 @@ void cpu_panic(void)
panic
(
"SMP bolixed
\n
"
);
panic
(
"SMP bolixed
\n
"
);
}
}
static
unsigned
long
current_tick_offset
;
static
unsigned
long
current_tick_offset
__read_mostly
;
/* This tick register synchronization scheme is taken entirely from
/* This tick register synchronization scheme is taken entirely from
* the ia64 port, see arch/ia64/kernel/smpboot.c for details and credit.
* the ia64 port, see arch/ia64/kernel/smpboot.c for details and credit.
...
@@ -1193,8 +1193,8 @@ void smp_send_stop(void)
...
@@ -1193,8 +1193,8 @@ void smp_send_stop(void)
{
{
}
}
unsigned
long
__per_cpu_base
;
unsigned
long
__per_cpu_base
__read_mostly
;
unsigned
long
__per_cpu_shift
;
unsigned
long
__per_cpu_shift
__read_mostly
;
EXPORT_SYMBOL
(
__per_cpu_base
);
EXPORT_SYMBOL
(
__per_cpu_base
);
EXPORT_SYMBOL
(
__per_cpu_shift
);
EXPORT_SYMBOL
(
__per_cpu_shift
);
...
...
arch/sparc64/kernel/time.c
View file @
d369ddd2
...
@@ -73,7 +73,7 @@ static __initdata struct sparc64_tick_ops dummy_tick_ops = {
...
@@ -73,7 +73,7 @@ static __initdata struct sparc64_tick_ops dummy_tick_ops = {
.
get_tick
=
dummy_get_tick
,
.
get_tick
=
dummy_get_tick
,
};
};
struct
sparc64_tick_ops
*
tick_ops
=
&
dummy_tick_ops
;
struct
sparc64_tick_ops
*
tick_ops
__read_mostly
=
&
dummy_tick_ops
;
#define TICK_PRIV_BIT (1UL << 63)
#define TICK_PRIV_BIT (1UL << 63)
...
@@ -195,7 +195,7 @@ static unsigned long tick_add_tick(unsigned long adj, unsigned long offset)
...
@@ -195,7 +195,7 @@ static unsigned long tick_add_tick(unsigned long adj, unsigned long offset)
return
new_tick
;
return
new_tick
;
}
}
static
struct
sparc64_tick_ops
tick_operations
=
{
static
struct
sparc64_tick_ops
tick_operations
__read_mostly
=
{
.
init_tick
=
tick_init_tick
,
.
init_tick
=
tick_init_tick
,
.
get_tick
=
tick_get_tick
,
.
get_tick
=
tick_get_tick
,
.
get_compare
=
tick_get_compare
,
.
get_compare
=
tick_get_compare
,
...
@@ -276,7 +276,7 @@ static unsigned long stick_add_compare(unsigned long adj)
...
@@ -276,7 +276,7 @@ static unsigned long stick_add_compare(unsigned long adj)
return
new_compare
;
return
new_compare
;
}
}
static
struct
sparc64_tick_ops
stick_operations
=
{
static
struct
sparc64_tick_ops
stick_operations
__read_mostly
=
{
.
init_tick
=
stick_init_tick
,
.
init_tick
=
stick_init_tick
,
.
get_tick
=
stick_get_tick
,
.
get_tick
=
stick_get_tick
,
.
get_compare
=
stick_get_compare
,
.
get_compare
=
stick_get_compare
,
...
@@ -422,7 +422,7 @@ static unsigned long hbtick_add_compare(unsigned long adj)
...
@@ -422,7 +422,7 @@ static unsigned long hbtick_add_compare(unsigned long adj)
return
val
;
return
val
;
}
}
static
struct
sparc64_tick_ops
hbtick_operations
=
{
static
struct
sparc64_tick_ops
hbtick_operations
__read_mostly
=
{
.
init_tick
=
hbtick_init_tick
,
.
init_tick
=
hbtick_init_tick
,
.
get_tick
=
hbtick_get_tick
,
.
get_tick
=
hbtick_get_tick
,
.
get_compare
=
hbtick_get_compare
,
.
get_compare
=
hbtick_get_compare
,
...
@@ -437,10 +437,9 @@ static struct sparc64_tick_ops hbtick_operations = {
...
@@ -437,10 +437,9 @@ static struct sparc64_tick_ops hbtick_operations = {
* NOTE: On SUN5 systems the ticker interrupt comes in using 2
* NOTE: On SUN5 systems the ticker interrupt comes in using 2
* interrupts, one at level14 and one with softint bit 0.
* interrupts, one at level14 and one with softint bit 0.
*/
*/
unsigned
long
timer_tick_offset
;
unsigned
long
timer_tick_offset
__read_mostly
;
unsigned
long
timer_tick_compare
;
static
unsigned
long
timer_ticks_per_nsec_quotient
;
static
unsigned
long
timer_ticks_per_nsec_quotient
__read_mostly
;
#define TICK_SIZE (tick_nsec / 1000)
#define TICK_SIZE (tick_nsec / 1000)
...
@@ -464,7 +463,7 @@ static inline void timer_check_rtc(void)
...
@@ -464,7 +463,7 @@ static inline void timer_check_rtc(void)
static
irqreturn_t
timer_interrupt
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
)
static
irqreturn_t
timer_interrupt
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
)
{
{
unsigned
long
ticks
,
pstate
;
unsigned
long
ticks
,
compare
,
pstate
;
write_seqlock
(
&
xtime_lock
);
write_seqlock
(
&
xtime_lock
);
...
@@ -483,14 +482,14 @@ static irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs * regs)
...
@@ -483,14 +482,14 @@ static irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs * regs)
:
"=r"
(
pstate
)
:
"=r"
(
pstate
)
:
"i"
(
PSTATE_IE
));
:
"i"
(
PSTATE_IE
));
timer_tick_
compare
=
tick_ops
->
add_compare
(
timer_tick_offset
);
compare
=
tick_ops
->
add_compare
(
timer_tick_offset
);
ticks
=
tick_ops
->
get_tick
();
ticks
=
tick_ops
->
get_tick
();
/* Restore PSTATE_IE. */
/* Restore PSTATE_IE. */
__asm__
__volatile__
(
"wrpr %0, 0x0, %%pstate"
__asm__
__volatile__
(
"wrpr %0, 0x0, %%pstate"
:
/* no outputs */
:
/* no outputs */
:
"r"
(
pstate
));
:
"r"
(
pstate
));
}
while
(
time_after_eq
(
ticks
,
timer_tick_
compare
));
}
while
(
time_after_eq
(
ticks
,
compare
));
timer_check_rtc
();
timer_check_rtc
();
...
@@ -506,11 +505,6 @@ void timer_tick_interrupt(struct pt_regs *regs)
...
@@ -506,11 +505,6 @@ void timer_tick_interrupt(struct pt_regs *regs)
do_timer
(
regs
);
do_timer
(
regs
);
/*
* Only keep timer_tick_offset uptodate, but don't set TICK_CMPR.
*/
timer_tick_compare
=
tick_ops
->
get_compare
()
+
timer_tick_offset
;
timer_check_rtc
();
timer_check_rtc
();
write_sequnlock
(
&
xtime_lock
);
write_sequnlock
(
&
xtime_lock
);
...
...
arch/sparc64/kernel/vmlinux.lds.S
View file @
d369ddd2
...
@@ -32,6 +32,8 @@ SECTIONS
...
@@ -32,6 +32,8 @@ SECTIONS
.
data1
:
{
*(
.
data1
)
}
.
data1
:
{
*(
.
data1
)
}
.
=
ALIGN
(
64
)
;
.
=
ALIGN
(
64
)
;
.
data.
cacheline_aligned
:
{
*(
.
data
.
cacheline_aligned
)
}
.
data.
cacheline_aligned
:
{
*(
.
data
.
cacheline_aligned
)
}
.
=
ALIGN
(
64
)
;
.
data.
read_mostly
:
{
*(
.
data
.
read_mostly
)
}
_edata
=
.
;
_edata
=
.
;
PROVIDE
(
edata
=
.
)
;
PROVIDE
(
edata
=
.
)
;
.
fixup
:
{
*(
.
fixup
)
}
.
fixup
:
{
*(
.
fixup
)
}
...
...
include/linux/cache.h
View file @
d369ddd2
...
@@ -13,7 +13,7 @@
...
@@ -13,7 +13,7 @@
#define SMP_CACHE_BYTES L1_CACHE_BYTES
#define SMP_CACHE_BYTES L1_CACHE_BYTES
#endif
#endif
#if
def CONFIG_X86
#if
defined(CONFIG_X86) || defined(CONFIG_SPARC64)
#define __read_mostly __attribute__((__section__(".data.read_mostly")))
#define __read_mostly __attribute__((__section__(".data.read_mostly")))
#else
#else
#define __read_mostly
#define __read_mostly
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment