Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=9d78592ed72dbff1d8825207f8def07858a49768
Commit:     9d78592ed72dbff1d8825207f8def07858a49768
Parent:     6f6a6dc0c8ebdb6514ab6bb58ba4b8739957b342
Author:     Christoph Hellwig <[EMAIL PROTECTED]>
AuthorDate: Wed Jul 25 21:31:09 2007 +1000
Committer:  Paul Mackerras <[EMAIL PROTECTED]>
CommitDate: Thu Jul 26 16:17:56 2007 +1000

    [POWERPC] spusched: Fix initial timeslice calculation
    
    Currently we calculate the first timeslice for every context
    incorrectly - alloc_spu_context calls spu_set_timeslice before we set
    ctx->prio so we always calculate the longest possible timeslice for the
    lowest possible priority.
    
    This patch makes sure to update the schedule-related fields before
    calculating the timeslice and also makes sure we update the timeslice for
    a non-running context when entering spu_run so a priority change affects
    the context as soon as possible.
    
    Signed-off-by: Christoph Hellwig <[EMAIL PROTECTED]>
    Signed-off-by: Jeremy Kerr <[EMAIL PROTECTED]>
    Signed-off-by: Paul Mackerras <[EMAIL PROTECTED]>
---
 arch/powerpc/platforms/cell/spufs/context.c |    3 ++-
 arch/powerpc/platforms/cell/spufs/run.c     |    4 ++++
 2 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/arch/powerpc/platforms/cell/spufs/context.c 
b/arch/powerpc/platforms/cell/spufs/context.c
index 6694f86..9cb081c 100644
--- a/arch/powerpc/platforms/cell/spufs/context.c
+++ b/arch/powerpc/platforms/cell/spufs/context.c
@@ -59,7 +59,8 @@ struct spu_context *alloc_spu_context(struct spu_gang *gang)
        INIT_LIST_HEAD(&ctx->aff_list);
        if (gang)
                spu_gang_add_ctx(gang, ctx);
-       ctx->cpus_allowed = current->cpus_allowed;
+
+       __spu_update_sched_info(ctx);
        spu_set_timeslice(ctx);
        ctx->stats.util_state = SPU_UTIL_IDLE_LOADED;
 
diff --git a/arch/powerpc/platforms/cell/spufs/run.c 
b/arch/powerpc/platforms/cell/spufs/run.c
index 0b50fa5..6abdd8f 100644
--- a/arch/powerpc/platforms/cell/spufs/run.c
+++ b/arch/powerpc/platforms/cell/spufs/run.c
@@ -312,6 +312,7 @@ long spufs_run_spu(struct spu_context *ctx, u32 *npc, u32 
*event)
        spu_acquire(ctx);
        if (ctx->state == SPU_STATE_SAVED) {
                __spu_update_sched_info(ctx);
+               spu_set_timeslice(ctx);
 
                ret = spu_activate(ctx, 0);
                if (ret) {
@@ -322,6 +323,9 @@ long spufs_run_spu(struct spu_context *ctx, u32 *npc, u32 
*event)
                /*
                 * We have to update the scheduling priority under active_mutex
                 * to protect against find_victim().
+                *
+                * No need to update the timeslice ASAP, it will get updated
+                * once the current one has expired.
                 */
                spu_update_sched_info(ctx);
        }
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to