Blackfin arch: SMP supporting patchset: Blackfin kernel and memory management code
Blackfin dual core BF561 processor can support SMP like features. https://docs.blackfin.uclinux.org/doku.php?id=linux-kernel:smp-like In this patch, we provide SMP extend to Blackfin kernel and memory management code Singed-off-by: Graf Yang <graf.yang@analog.com> Signed-off-by: Mike Frysinger <vapier.adi@gmail.com> Signed-off-by: Bryan Wu <cooloney@kernel.org>
This commit is contained in:
@@ -171,6 +171,13 @@ asmlinkage int bfin_clone(struct pt_regs *regs)
|
||||
unsigned long clone_flags;
|
||||
unsigned long newsp;
|
||||
|
||||
#ifdef __ARCH_SYNC_CORE_DCACHE
|
||||
if (current->rt.nr_cpus_allowed == num_possible_cpus()) {
|
||||
current->cpus_allowed = cpumask_of_cpu(smp_processor_id());
|
||||
current->rt.nr_cpus_allowed = 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* syscall2 puts clone_flags in r0 and usp in r1 */
|
||||
clone_flags = regs->r0;
|
||||
newsp = regs->r1;
|
||||
@@ -338,22 +345,22 @@ int _access_ok(unsigned long addr, unsigned long size)
|
||||
if (addr >= (unsigned long)__init_begin &&
|
||||
addr + size <= (unsigned long)__init_end)
|
||||
return 1;
|
||||
if (addr >= L1_SCRATCH_START
|
||||
&& addr + size <= L1_SCRATCH_START + L1_SCRATCH_LENGTH)
|
||||
if (addr >= get_l1_scratch_start()
|
||||
&& addr + size <= get_l1_scratch_start() + L1_SCRATCH_LENGTH)
|
||||
return 1;
|
||||
#if L1_CODE_LENGTH != 0
|
||||
if (addr >= L1_CODE_START + (_etext_l1 - _stext_l1)
|
||||
&& addr + size <= L1_CODE_START + L1_CODE_LENGTH)
|
||||
if (addr >= get_l1_code_start() + (_etext_l1 - _stext_l1)
|
||||
&& addr + size <= get_l1_code_start() + L1_CODE_LENGTH)
|
||||
return 1;
|
||||
#endif
|
||||
#if L1_DATA_A_LENGTH != 0
|
||||
if (addr >= L1_DATA_A_START + (_ebss_l1 - _sdata_l1)
|
||||
&& addr + size <= L1_DATA_A_START + L1_DATA_A_LENGTH)
|
||||
if (addr >= get_l1_data_a_start() + (_ebss_l1 - _sdata_l1)
|
||||
&& addr + size <= get_l1_data_a_start() + L1_DATA_A_LENGTH)
|
||||
return 1;
|
||||
#endif
|
||||
#if L1_DATA_B_LENGTH != 0
|
||||
if (addr >= L1_DATA_B_START + (_ebss_b_l1 - _sdata_b_l1)
|
||||
&& addr + size <= L1_DATA_B_START + L1_DATA_B_LENGTH)
|
||||
if (addr >= get_l1_data_b_start() + (_ebss_b_l1 - _sdata_b_l1)
|
||||
&& addr + size <= get_l1_data_b_start() + L1_DATA_B_LENGTH)
|
||||
return 1;
|
||||
#endif
|
||||
#if L2_LENGTH != 0
|
||||
|
Reference in New Issue
Block a user