[RFC PATCH 05/17] ARM: kernel: save/restore kernel IF
Lorenzo Pieralisi
lorenzo.pieralisi at arm.com
Mon Jul 11 11:36:15 EDT 2011
On Sat, Jul 09, 2011 at 09:45:08AM +0100, Russell King - ARM Linux wrote:
> On Sat, Jul 09, 2011 at 09:38:15AM +0100, Russell King - ARM Linux wrote:
> > On Thu, Jul 07, 2011 at 04:50:18PM +0100, Lorenzo Pieralisi wrote:
> > > +static int late_init(void)
> > > +{
> > > + int rc;
> > > + struct sr_cluster *cluster;
> > > + int cluster_index, cpu_index = sr_platform_get_cpu_index();
> >
> > Stop this madness, and use the standard linux APIs like smp_processor_id
> > here. It might actually help you find bugs, like the fact that you're
> > in a preemptible context here, and so could be rescheduled onto any other
> > CPU in the system _after_ you've read the MPIDR register.
> >
You are right, wanted to make all code uniform and rushed in a change
which is bound to create issues.
> > > +
> > > + cluster_index = sr_platform_get_cluster_index();
> > > + cluster = main_table.cluster_table + cluster_index;
> > > + main_table.os_mmu_context[cluster_index][cpu_index] =
> > > + current->active_mm->pgd;
> > > + cpu_switch_mm(main_table.fw_mmu_context, current->active_mm);
> > > + rc = sr_platform_init();
> > > + cpu_switch_mm(main_table.os_mmu_context[cluster_index][cpu_index],
> > > + current->active_mm);
> >
> > CPU numbers are unique in the system, why do you need a 'cluster_index'
> > to save this? In fact why do you even need to save it in a structure
> > at all?
> >
> > Plus, "cluster" is not used, please get rid of it.
>
> Oh, that's another thing. This thread is about introducing idle support
> not cluster support. Cluster support is surely something different (esp.
> as it seems from the above code that you're trying to support several
> clusters of MPCore CPUs, each with physical 0-N CPU numbers.)
>
> Cluster support should be an entirely separate patch series.
>
Yes it is cluster support, within idle though, that has to be said;
I will introduce it in a different patch as suggested and this patch
will have to rely on it.
[...]
> In any case, smp_processor_id() will be (and must be) unique in any given
> running kernel across all CPUs, even if you have clusters of N CPUs all
> physically numbered 0-N.
>
Indeed.
More information about the linux-arm-kernel
mailing list