vserver 1.9.5.x5
[linux-2.6.git] / arch / ppc64 / kernel / rtas_flash.c
index 9075403..c0cefd3 100644 (file)
@@ -105,7 +105,7 @@ struct rtas_validate_flash_t
        unsigned int update_results;    /* Update results token */
 };
 
-static spinlock_t flash_file_open_lock = SPIN_LOCK_UNLOCKED;
+static DEFINE_SPINLOCK(flash_file_open_lock);
 static struct proc_dir_entry *firmware_flash_pde;
 static struct proc_dir_entry *firmware_update_pde;
 static struct proc_dir_entry *validate_pde;
@@ -344,8 +344,8 @@ static void manage_flash(struct rtas_manage_flash_t *args_buf)
        s32 rc;
 
        while (1) {
-               rc = (s32) rtas_call(rtas_token("ibm,manage-flash-image"), 1, 
-                               1, NULL, (long) args_buf->op);
+               rc = rtas_call(rtas_token("ibm,manage-flash-image"), 1, 
+                              1, NULL, args_buf->op);
                if (rc == RTAS_RC_BUSY)
                        udelay(1);
                else if (rtas_is_extended_busy(rc)) {
@@ -429,15 +429,15 @@ static void validate_flash(struct rtas_validate_flash_t *args_buf)
 {
        int token = rtas_token("ibm,validate-flash-image");
        unsigned int wait_time;
-       long update_results;
+       int update_results;
        s32 rc; 
 
        rc = 0;
        while(1) {
                spin_lock(&rtas_data_buf_lock);
                memcpy(rtas_data_buf, args_buf->buf, VALIDATE_BUF_SIZE);
-               rc = (s32) rtas_call(token, 2, 2, &update_results, 
-                                    __pa(rtas_data_buf), args_buf->buf_size);
+               rc = rtas_call(token, 2, 2, &update_results, 
+                              (u32) __pa(rtas_data_buf), args_buf->buf_size);
                memcpy(args_buf->buf, rtas_data_buf, VALIDATE_BUF_SIZE);
                spin_unlock(&rtas_data_buf_lock);
                        
@@ -451,7 +451,7 @@ static void validate_flash(struct rtas_validate_flash_t *args_buf)
        }
 
        args_buf->status = rc;
-       args_buf->update_results = (u32) update_results;
+       args_buf->update_results = update_results;
 }
 
 static int get_validate_flash_msg(struct rtas_validate_flash_t *args_buf, 
@@ -562,6 +562,7 @@ static int validate_flash_release(struct inode *inode, struct file *file)
                validate_flash(args_buf);
        }
 
+       /* The matching atomic_inc was in rtas_excl_open() */
        atomic_dec(&dp->count);
 
        return 0;
@@ -572,7 +573,8 @@ static void remove_flash_pde(struct proc_dir_entry *dp)
        if (dp) {
                if (dp->data != NULL)
                        kfree(dp->data);
-               remove_proc_entry(dp->name, NULL);
+               dp->owner = NULL;
+               remove_proc_entry(dp->name, dp->parent);
        }
 }
 
@@ -692,7 +694,7 @@ int __init rtas_flash_init(void)
        if (rc != 0)
                goto cleanup;
 
-       manage_pde = create_flash_pde("ppc64/rtas" MANAGE_FLASH_NAME,
+       manage_pde = create_flash_pde("ppc64/rtas/" MANAGE_FLASH_NAME,
                                      &manage_flash_operations);
        if (manage_pde == NULL) {
                rc = -ENOMEM;