03 Sep, 2010

1 commit


31 Jul, 2010

4 commits

  • A function that copies the padata cpumasks to a user buffer
    is a bit error prone. The cpumask can change any time so we
    can't be sure to have the right cpumask when using this function.
    A user who is interested in the padata cpumasks should register
    to the padata cpumask notifier chain instead. Users of
    padata_get_cpumask are already updated, so we can remove it.

    Signed-off-by: Steffen Klassert
    Signed-off-by: Herbert Xu

    Steffen Klassert
     
  • We pass a pointer to the new padata cpumasks to the cpumask_change_notifier
    chain. So users can access the cpumasks without the need of an extra
    padata_get_cpumask function.

    Signed-off-by: Steffen Klassert
    Signed-off-by: Herbert Xu

    Steffen Klassert
     
  • padata_set_cpumask needs to be protected by a lock. We make
    __padata_set_cpumasks unlocked and static. So this function
    can be used by the exported and locked padata_set_cpumask and
    padata_set_cpumasks functions.

    Signed-off-by: Steffen Klassert
    Signed-off-by: Herbert Xu

    Steffen Klassert
     
  • We rename padata_alloc to padata_alloc_possible because this
    function allocates a padata_instance and uses the cpu_possible
    mask for parallel and serial workers. Also we rename __padata_alloc
    to padata_alloc to avoid to export underlined functions. Underlined
    functions are considered to be private to padata. Users are updated
    accordingly.

    Signed-off-by: Steffen Klassert
    Signed-off-by: Herbert Xu

    Steffen Klassert
     

19 Jul, 2010

2 commits

  • Added sysfs primitives to padata subsystem. Now API user may
    embedded kobject each padata instance contains into any sysfs
    hierarchy. For now padata sysfs interface provides only
    two objects:
    serial_cpumask [RW] - cpumask for serial workers
    parallel_cpumask [RW] - cpumask for parallel workers

    Signed-off-by: Dan Kruchinin
    Signed-off-by: Herbert Xu

    Dan Kruchinin
     
  • The aim of this patch is to make two separate cpumasks
    for padata parallel and serial workers respectively.
    It allows user to make more thin and sophisticated configurations
    of padata framework. For example user may bind parallel and serial workers to non-intersecting
    CPU groups to gain better performance. Also each padata instance has notifiers chain for its
    cpumasks now. If either parallel or serial or both masks were changed all
    interested subsystems will get notification about that. It's especially useful
    if padata user uses algorithm for callback CPU selection according to serial cpumask.

    Signed-off-by: Dan Kruchinin
    Signed-off-by: Herbert Xu

    Dan Kruchinin
     

14 Jul, 2010

2 commits

  • We count the number of processed objects on a percpu basis,
    so we need to go through all the percpu reorder queues to calculate
    the sequence number of the next object that needs serialization.
    This patch changes this to count the number of processed objects
    global. So we can calculate the sequence number and the percpu
    reorder queue of the next object that needs serialization without
    searching through the percpu reorder queues. This avoids some
    accesses to memory of foreign cpus.

    Signed-off-by: Steffen Klassert
    Signed-off-by: Herbert Xu

    Steffen Klassert
     
  • This patch introduces the PADATA_INVALID flag which is
    checked on padata start. This will be used to mark a padata
    instance as invalid, if the padata cpumask does not intersect
    with the active cpumask. we change padata_start to return an
    error if the PADATA_INVALID is set. Also we adapt the only
    padata user, pcrypt to this change.

    Signed-off-by: Steffen Klassert
    Signed-off-by: Herbert Xu

    Steffen Klassert
     

19 May, 2010

2 commits

  • Signed-off-by: Steffen Klassert
    Signed-off-by: Herbert Xu

    Steffen Klassert
     
  • padata_get_next needs to check whether the next object that
    need serialization must be parallel processed by the local cpu.
    This check was wrong implemented and returned always true,
    so the try_again loop in padata_reorder was never taken. This
    can lead to object leaks in some rare cases due to a race that
    appears with the trylock in padata_reorder. The try_again loop
    was not a good idea after all, because a cpu could take that
    loop frequently, so we handle this with a timer instead.

    This patch adds a timer to handle the race that appears with
    the trylock. If cpu1 queues an object to the reorder queue while
    cpu2 holds the pd->lock but left the while loop in padata_reorder
    already, cpu2 can't care for this object and cpu1 exits because
    it can't get the lock. Usually the next cpu that takes the lock
    cares for this object too. We need the timer just if this object
    was the last one that arrives to the reorder queues. The timer
    function sends it out in this case.

    Signed-off-by: Steffen Klassert
    Signed-off-by: Herbert Xu

    Steffen Klassert
     

06 Jan, 2010

1 commit