Hi Al,

Today's linux-next merge of the vfs tree got a conflict in
arch/powerpc/kernel/rtas_flash.c between commit fb4696c39573
("powerpc/rtas_flash: Fix bad memory access") from the powerpc tree and
commits ad18a364f186 ("powerpc/rtas_flash: Free kmem upon module exit")
and 2352ad01409d ("ppc: Clean up rtas_flash driver somewhat") from the
vfs tree.

I fixed it up (see below) and can carry the fix as necessary (no action
is required).

-- 
Cheers,
Stephen Rothwell                    s...@canb.auug.org.au

diff --cc arch/powerpc/kernel/rtas_flash.c
index 243e184,5b77026..0000000
--- a/arch/powerpc/kernel/rtas_flash.c
+++ b/arch/powerpc/kernel/rtas_flash.c
@@@ -310,9 -316,9 +328,9 @@@ static ssize_t rtas_flash_write(struct 
         * proc file
         */
        if (uf->flist == NULL) {
 -              uf->flist = kmem_cache_alloc(flash_block_cache, GFP_KERNEL);
 +              uf->flist = kmem_cache_zalloc(flash_block_cache, GFP_KERNEL);
                if (!uf->flist)
-                       return -ENOMEM;
+                       goto nomem;
        }
  
        fl = uf->flist;
@@@ -321,18 -327,18 +339,18 @@@
        next_free = fl->num_blocks;
        if (next_free == FLASH_BLOCKS_PER_NODE) {
                /* Need to allocate another block_list */
 -              fl->next = kmem_cache_alloc(flash_block_cache, GFP_KERNEL);
 +              fl->next = kmem_cache_zalloc(flash_block_cache, GFP_KERNEL);
                if (!fl->next)
-                       return -ENOMEM;
+                       goto nomem;
                fl = fl->next;
                next_free = 0;
        }
  
        if (count > RTAS_BLK_SIZE)
                count = RTAS_BLK_SIZE;
 -      p = kmem_cache_alloc(flash_block_cache, GFP_KERNEL);
 +      p = kmem_cache_zalloc(flash_block_cache, GFP_KERNEL);
        if (!p)
-               return -ENOMEM;
+               goto nomem;
        
        if(copy_from_user(p, buffer, count)) {
                kmem_cache_free(flash_block_cache, p);
@@@ -722,65 -694,13 +706,13 @@@ static int __init rtas_flash_init(void
                return 1;
        }
  
-       firmware_flash_pde = create_flash_pde("powerpc/rtas/"
-                                             FIRMWARE_FLASH_NAME,
-                                             &rtas_flash_operations);
-       if (firmware_flash_pde == NULL) {
-               rc = -ENOMEM;
-               goto cleanup;
-       }
- 
-       rc = initialize_flash_pde_data("ibm,update-flash-64-and-reboot",
-                                      sizeof(struct rtas_update_flash_t), 
-                                      firmware_flash_pde);
-       if (rc != 0)
-               goto cleanup;
- 
-       firmware_update_pde = create_flash_pde("powerpc/rtas/"
-                                              FIRMWARE_UPDATE_NAME,
-                                              &rtas_flash_operations);
-       if (firmware_update_pde == NULL) {
-               rc = -ENOMEM;
-               goto cleanup;
-       }
- 
-       rc = initialize_flash_pde_data("ibm,update-flash-64-and-reboot",
-                                      sizeof(struct rtas_update_flash_t), 
-                                      firmware_update_pde);
-       if (rc != 0)
-               goto cleanup;
- 
-       validate_pde = create_flash_pde("powerpc/rtas/" VALIDATE_FLASH_NAME,
-                                       &validate_flash_operations);
-       if (validate_pde == NULL) {
-               rc = -ENOMEM;
-               goto cleanup;
-       }
- 
-       rc = initialize_flash_pde_data("ibm,validate-flash-image",
-                                      sizeof(struct rtas_validate_flash_t), 
-                                      validate_pde);
-       if (rc != 0)
-               goto cleanup;
- 
-       manage_pde = create_flash_pde("powerpc/rtas/" MANAGE_FLASH_NAME,
-                                     &manage_flash_operations);
-       if (manage_pde == NULL) {
-               rc = -ENOMEM;
-               goto cleanup;
-       }
- 
-       rc = initialize_flash_pde_data("ibm,manage-flash-image",
-                                      sizeof(struct rtas_manage_flash_t),
-                                      manage_pde);
-       if (rc != 0)
-               goto cleanup;
- 
-       rtas_flash_term_hook = rtas_flash_firmware;
+       rtas_validate_flash_data.buf = kzalloc(VALIDATE_BUF_SIZE, GFP_KERNEL);
+       if (!rtas_validate_flash_data.buf)
+               return -ENOMEM;
  
        flash_block_cache = kmem_cache_create("rtas_flash_cache",
 -                                            RTAS_BLK_SIZE, RTAS_BLK_SIZE, 0,
 -                                            rtas_block_ctor);
 +                              RTAS_BLK_SIZE, RTAS_BLK_SIZE, 0,
 +                              NULL);
        if (!flash_block_cache) {
                printk(KERN_ERR "%s: failed to create block cache\n",
                                __func__);
@@@ -800,20 -742,17 +754,22 @@@ enomem_buf
  
  static void __exit rtas_flash_cleanup(void)
  {
+       int i;
+ 
        rtas_flash_term_hook = NULL;
  
 +      if (rtas_firmware_flash_list) {
 +              free_flash_list(rtas_firmware_flash_list);
 +              rtas_firmware_flash_list = NULL;
 +      }
 +
-       if (flash_block_cache)
-               kmem_cache_destroy(flash_block_cache);
+       for (i = 0; i < ARRAY_SIZE(rtas_flash_files); i++) {
+               const struct rtas_flash_file *f = &rtas_flash_files[i];
+               remove_proc_entry(f->filename, NULL);
+       }
  
-       remove_flash_pde(firmware_flash_pde);
-       remove_flash_pde(firmware_update_pde);
-       remove_flash_pde(validate_pde);
-       remove_flash_pde(manage_pde);
+       kmem_cache_destroy(flash_block_cache);
+       kfree(rtas_validate_flash_data.buf);
  }
  
  module_init(rtas_flash_init);

Attachment: pgpVJvJzX3sR4.pgp
Description: PGP signature

Reply via email to