lkml.org 
[lkml]   [2009]   [Jul]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 1/1] cpu_hotplug: don't play with current->cpus_allowed
    On 07/30, Lai Jiangshan wrote:
    >
    > Oleg Nesterov wrote:
    > > _cpu_down() changes the current task's affinity and then recovers it at
    > > the end. The problems are well known: we can't restore old_allowed if it
    > > was bound to the now-dead-cpu, and we can race with the userspace which
    > > can change cpu-affinity during unplug.
    > >
    > > _cpu_down() should not play with current->cpus_allowed at all. Instead,
    > > take_cpu_down() can migrate the caller of _cpu_down() after __cpu_disable()
    > > removes the dying cpu from cpu_online_mask.
    > >
    > > static int __ref take_cpu_down(void *_param)
    > > {
    > > struct take_cpu_down_param *param = _param;
    > > + unsigned int cpu = (unsigned long)param->hcpu;
    > > int err;
    > >
    > > /* Ensure this CPU doesn't handle any more interrupts. */
    > > @@ -181,6 +183,8 @@ static int __ref take_cpu_down(void *_pa
    > > raw_notifier_call_chain(&cpu_chain, CPU_DYING | param->mod,
    > > param->hcpu);
    > >
    > > + if (task_cpu(param->caller) == cpu)
    > > + move_task_off_dead_cpu(cpu, param->caller);
    >
    > move_task_off_dead_cpu() calls cpuset_cpus_allowed_locked() which
    > needs callback_mutex held. But actually we don't hold it, it'll
    > will corrupt the work of other task which holds callback_mutex.
    > Is it right?

    Of course it is not. That is why I tried to kill cpuset_lock() first.

    And I still think it must die. But I don't know how to remove it.

    Oleg.



    \
     
     \ /
      Last update: 2009-07-30 18:39    [W:0.020 / U:16.860 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site