]> err.no Git - linux-2.6/blobdiff - arch/powerpc/platforms/cell/spufs/spufs.h
Merge branch 'drm-patches' of master.kernel.org:/pub/scm/linux/kernel/git/airlied...
[linux-2.6] / arch / powerpc / platforms / cell / spufs / spufs.h
index 0fb366d9d257c97cd012703ab3f196c5986f7f0e..0a947fd7de57c3da11e2444b64d5d020637a9323 100644 (file)
@@ -60,7 +60,7 @@ struct spu_context {
 
        enum { SPU_STATE_RUNNABLE, SPU_STATE_SAVED } state;
        struct mutex state_mutex;
-       struct semaphore run_sema;
+       struct mutex run_mutex;
 
        struct mm_struct *owner;
 
@@ -141,6 +141,7 @@ struct spu_context_ops {
                               struct spu_dma_info * info);
        void (*proxydma_info_read) (struct spu_context * ctx,
                                    struct spu_proxydma_info * info);
+       void (*restart_dma)(struct spu_context *ctx);
 };
 
 extern struct spu_context_ops spu_hw_ops;
@@ -172,6 +173,9 @@ int put_spu_gang(struct spu_gang *gang);
 void spu_gang_remove_ctx(struct spu_gang *gang, struct spu_context *ctx);
 void spu_gang_add_ctx(struct spu_gang *gang, struct spu_context *ctx);
 
+/* fault handling */
+int spufs_handle_class1(struct spu_context *ctx);
+
 /* context management */
 static inline void spu_acquire(struct spu_context *ctx)
 {
@@ -192,7 +196,6 @@ void spu_unmap_mappings(struct spu_context *ctx);
 void spu_forget(struct spu_context *ctx);
 int spu_acquire_runnable(struct spu_context *ctx, unsigned long flags);
 void spu_acquire_saved(struct spu_context *ctx);
-int spu_acquire_exclusive(struct spu_context *ctx);
 
 int spu_activate(struct spu_context *ctx, unsigned long flags);
 void spu_deactivate(struct spu_context *ctx);
@@ -220,14 +223,13 @@ extern char *isolated_loader;
                prepare_to_wait(&(wq), &__wait, TASK_INTERRUPTIBLE);    \
                if (condition)                                          \
                        break;                                          \
-               if (!signal_pending(current)) {                         \
-                       spu_release(ctx);                               \
-                       schedule();                                     \
-                       spu_acquire(ctx);                               \
-                       continue;                                       \
+               if (signal_pending(current)) {                          \
+                       __ret = -ERESTARTSYS;                           \
+                       break;                                          \
                }                                                       \
-               __ret = -ERESTARTSYS;                                   \
-               break;                                                  \
+               spu_release(ctx);                                       \
+               schedule();                                             \
+               spu_acquire(ctx);                                       \
        }                                                               \
        finish_wait(&(wq), &__wait);                                    \
        __ret;                                                          \