mirror of
https://github.com/torvalds/linux
synced 2024-11-05 18:23:50 +00:00
sparc64: Use xcall_deliver() consistently.
There remained some spots still vectoring to the appropriate *_xcall_deliver() function manually. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
5e0797e5b8
commit
622824dbb5
1 changed files with 17 additions and 23 deletions
|
@ -890,29 +890,24 @@ void smp_flush_dcache_page_impl(struct page *page, int cpu)
|
|||
__local_flush_dcache_page(page);
|
||||
} else if (cpu_online(cpu)) {
|
||||
void *pg_addr = page_address(page);
|
||||
u64 data0;
|
||||
u64 data0 = 0;
|
||||
|
||||
if (tlb_type == spitfire) {
|
||||
data0 =
|
||||
((u64)&xcall_flush_dcache_page_spitfire);
|
||||
data0 = ((u64)&xcall_flush_dcache_page_spitfire);
|
||||
if (page_mapping(page) != NULL)
|
||||
data0 |= ((u64)1 << 32);
|
||||
spitfire_xcall_deliver(data0,
|
||||
__pa(pg_addr),
|
||||
(u64) pg_addr,
|
||||
mask);
|
||||
} else if (tlb_type == cheetah || tlb_type == cheetah_plus) {
|
||||
#ifdef DCACHE_ALIASING_POSSIBLE
|
||||
data0 =
|
||||
((u64)&xcall_flush_dcache_page_cheetah);
|
||||
cheetah_xcall_deliver(data0,
|
||||
__pa(pg_addr),
|
||||
0, mask);
|
||||
data0 = ((u64)&xcall_flush_dcache_page_cheetah);
|
||||
#endif
|
||||
}
|
||||
if (data0) {
|
||||
xcall_deliver(data0, __pa(pg_addr),
|
||||
(u64) pg_addr, mask);
|
||||
#ifdef CONFIG_DEBUG_DCFLUSH
|
||||
atomic_inc(&dcpage_flushes_xcall);
|
||||
atomic_inc(&dcpage_flushes_xcall);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
put_cpu();
|
||||
|
@ -920,10 +915,10 @@ void smp_flush_dcache_page_impl(struct page *page, int cpu)
|
|||
|
||||
void flush_dcache_page_all(struct mm_struct *mm, struct page *page)
|
||||
{
|
||||
void *pg_addr = page_address(page);
|
||||
cpumask_t mask = cpu_online_map;
|
||||
u64 data0;
|
||||
void *pg_addr;
|
||||
int this_cpu;
|
||||
u64 data0;
|
||||
|
||||
if (tlb_type == hypervisor)
|
||||
return;
|
||||
|
@ -937,25 +932,24 @@ void flush_dcache_page_all(struct mm_struct *mm, struct page *page)
|
|||
#endif
|
||||
if (cpus_empty(mask))
|
||||
goto flush_self;
|
||||
data0 = 0;
|
||||
pg_addr = page_address(page);
|
||||
if (tlb_type == spitfire) {
|
||||
data0 = ((u64)&xcall_flush_dcache_page_spitfire);
|
||||
if (page_mapping(page) != NULL)
|
||||
data0 |= ((u64)1 << 32);
|
||||
spitfire_xcall_deliver(data0,
|
||||
__pa(pg_addr),
|
||||
(u64) pg_addr,
|
||||
mask);
|
||||
} else if (tlb_type == cheetah || tlb_type == cheetah_plus) {
|
||||
#ifdef DCACHE_ALIASING_POSSIBLE
|
||||
data0 = ((u64)&xcall_flush_dcache_page_cheetah);
|
||||
cheetah_xcall_deliver(data0,
|
||||
__pa(pg_addr),
|
||||
0, mask);
|
||||
#endif
|
||||
}
|
||||
if (data0) {
|
||||
xcall_deliver(data0, __pa(pg_addr),
|
||||
(u64) pg_addr, mask);
|
||||
#ifdef CONFIG_DEBUG_DCFLUSH
|
||||
atomic_inc(&dcpage_flushes_xcall);
|
||||
atomic_inc(&dcpage_flushes_xcall);
|
||||
#endif
|
||||
}
|
||||
flush_self:
|
||||
__local_flush_dcache_page(page);
|
||||
|
||||
|
|
Loading…
Reference in a new issue