Re: [PATCH] [CPU-HOTPLUG] convert cpucontrol to be a rwsem

Dominik Brodowski
2004-11-02T22:32:19Z

On Mon, Nov 01, 2004 at 07:00:07AM -0700, Zwane Mwaikambo wrote:
> On Mon, 1 Nov 2004, Dominik Brodowski wrote:
>
> > [CPU-HOTPLUG] Use a rw-semaphore for serializing and locking
> >
> > Currently, lock_cpu_hotplug serializes multiple calls to cpufreq->target()
> > on multiple CPUs even though that's unneccessary. Even further, it
> > serializes these calls with totally unrelated other parts of the kernel...
> > some ppc64 event reporting, some cache management, and so on. In my opinion
> > locking should be done subsystem (and normally data-)specific, and disabling
> > CPU hotplug should just do that.
> >
> > This patch converts the semaphore cpucontrol to be a rwsem which allows us
> > to use it for _both_ variants: locking (write) and (multiple) other parts
> > disabling CPU hotplug (read).
> >
> > Only problem I see with this approach is that lock_cpu_hotplug_interruptible()
> > needs to disappear as there is no down_write_interruptible() for rw-semaphores.
> >
> > Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.de>
>
> Agreed it makes a lot more sense, i think there could be some places where
> we use preempt_disable to protect against cpu offline which could
> converted, but that can come later.

Except that we don't want to (and can't[*]) disable preemption in the
cpufreq case. Therefore, we __need__ to disable CPU hotplug specifically,
and not meddle with other issues like preemption, scheduling, CPUs which are
in the allowed_map, and so on. So back to the original patch: Rusty, do you
agree with it?

Thanks,
Dominik

[*] calls to cpufreq->target() may sleep.