powerpc/pseries: Move some PAPR paravirt functions to their own file
These functions will be used by the queued spinlock implementation, and may be useful elsewhere too, so move them out of spinlock.h. Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Acked-by: Waiman Long <longman@redhat.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/20200724131423.1362108-2-npiggin@gmail.com
This commit is contained in:
committed by
Michael Ellerman
parent
dbce456280
commit
20d444d06f
@@ -27,14 +27,14 @@ void splpar_spin_yield(arch_spinlock_t *lock)
|
||||
return;
|
||||
holder_cpu = lock_value & 0xffff;
|
||||
BUG_ON(holder_cpu >= NR_CPUS);
|
||||
yield_count = be32_to_cpu(lppaca_of(holder_cpu).yield_count);
|
||||
|
||||
yield_count = yield_count_of(holder_cpu);
|
||||
if ((yield_count & 1) == 0)
|
||||
return; /* virtual cpu is currently running */
|
||||
rmb();
|
||||
if (lock->slock != lock_value)
|
||||
return; /* something has changed */
|
||||
plpar_hcall_norets(H_CONFER,
|
||||
get_hard_smp_processor_id(holder_cpu), yield_count);
|
||||
yield_to_preempted(holder_cpu, yield_count);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(splpar_spin_yield);
|
||||
|
||||
@@ -53,13 +53,13 @@ void splpar_rw_yield(arch_rwlock_t *rw)
|
||||
return; /* no write lock at present */
|
||||
holder_cpu = lock_value & 0xffff;
|
||||
BUG_ON(holder_cpu >= NR_CPUS);
|
||||
yield_count = be32_to_cpu(lppaca_of(holder_cpu).yield_count);
|
||||
|
||||
yield_count = yield_count_of(holder_cpu);
|
||||
if ((yield_count & 1) == 0)
|
||||
return; /* virtual cpu is currently running */
|
||||
rmb();
|
||||
if (rw->lock != lock_value)
|
||||
return; /* something has changed */
|
||||
plpar_hcall_norets(H_CONFER,
|
||||
get_hard_smp_processor_id(holder_cpu), yield_count);
|
||||
yield_to_preempted(holder_cpu, yield_count);
|
||||
}
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user