Hi Christoph,

I love your patch! Perhaps something to improve:

[auto build test WARNING on linus/master]
[also build test WARNING on v5.0-rc4 next-20190205]
[if your patch is applied to the wrong git tree, please drop us a note to help 
improve the system]

url:    
https://github.com/0day-ci/linux/commits/Christoph-Hellwig/dell_rbu-stop-abusing-the-DMA-API/20190201-133154

smatch warnings:
drivers/platform/x86/dell_rbu.c:454 img_update_realloc() warn: inconsistent 
returns 'spin_lock:&rbu_data.lock'.
  Locked on:   line 420
  Unlocked on: line 442

# 
https://github.com/0day-ci/linux/commit/d91efe52c9d0b3ae582a91593333ca5973f0e81e
git remote add linux-review https://github.com/0day-ci/linux
git remote update linux-review
git checkout d91efe52c9d0b3ae582a91593333ca5973f0e81e
vim +454 drivers/platform/x86/dell_rbu.c

6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  392  
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  393  /*
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  394   * 
img_update_realloc: This function allocates the contiguous pages to
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  395   * 
accommodate the requested size of data. The memory address and size
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  396   * 
values are stored globally and on every call to this function the new
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  397   * 
size is checked to see if more data is required than the existing size.
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  398   * 
If true the previous memory is freed and new allocation is done to
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  399   * 
accommodate the new size. If the incoming size is less then than the
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  400   * 
already allocated size, then that memory is reused. This function is
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  401   * 
called with lock held and returns with lock held.
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  402   */
dda8577f drivers/firmware/dell_rbu.c     Andrew Morton     2005-09-16  403  
static int img_update_realloc(unsigned long size)
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  404  {
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  405      
unsigned char *image_update_buffer = NULL;
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  406      
unsigned long img_buf_phys_addr;
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  407      
int ordernum;
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  408  
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  409      
/*
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  410      
 * check if the buffer of sufficient size has been
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  411      
 * already allocated
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  412      
 */
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  413      
if (rbu_data.image_update_buffer_size >= size) {
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  414      
        /*
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  415      
         * check for corruption
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  416      
         */
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  417      
        if ((size != 0) && (rbu_data.image_update_buffer == NULL)) {
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  418      
                printk(KERN_ERR "dell_rbu:%s: corruption "
eecd5853 drivers/firmware/dell_rbu.c     Harvey Harrison   2008-04-29  419      
                        "check failed\n", __func__);
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  420      
                return -EINVAL;
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  421      
        }
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  422      
        /*
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  423      
         * we have a valid pre-allocated buffer with
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  424      
         * sufficient size
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  425      
         */
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  426      
        return 0;
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  427      
}
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  428  
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  429      
/*
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  430      
 * free any previously allocated buffer
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  431      
 */
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  432      
img_update_free();
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  433  
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  434      
spin_unlock(&rbu_data.lock);
                                                                                
^^^^^^^^^^^^^^^^^^^^^^^^^^^

6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  435  
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  436      
ordernum = get_order(size);
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  437      
image_update_buffer =
d91efe52 drivers/platform/x86/dell_rbu.c Christoph Hellwig 2019-01-29  438      
        (unsigned char *)__get_free_pages(GFP_DMA32, ordernum);
d91efe52 drivers/platform/x86/dell_rbu.c Christoph Hellwig 2019-01-29  439      
if (!image_update_buffer) {
d91efe52 drivers/platform/x86/dell_rbu.c Christoph Hellwig 2019-01-29  440      
        pr_debug("Not enough memory for image update:"
d91efe52 drivers/platform/x86/dell_rbu.c Christoph Hellwig 2019-01-29  441      
                "size = %ld\n", size);
d91efe52 drivers/platform/x86/dell_rbu.c Christoph Hellwig 2019-01-29  442      
        return -ENOMEM;
                                                                                
        ^^^^^^^^^^^^^^
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  443      
}
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  444  
d91efe52 drivers/platform/x86/dell_rbu.c Christoph Hellwig 2019-01-29  445      
img_buf_phys_addr = (unsigned long)virt_to_phys(image_update_buffer);
d91efe52 drivers/platform/x86/dell_rbu.c Christoph Hellwig 2019-01-29  446      
if (WARN_ON_ONCE(img_buf_phys_addr > BIOS_SCAN_LIMIT))
d91efe52 drivers/platform/x86/dell_rbu.c Christoph Hellwig 2019-01-29  447      
        return -EINVAL; /* can't happen per defintion */
                                                                                
        ^^^^^^^^^^^^^^
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  448  
d91efe52 drivers/platform/x86/dell_rbu.c Christoph Hellwig 2019-01-29  449      
spin_lock(&rbu_data.lock);
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  450      
rbu_data.image_update_buffer = image_update_buffer;
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  451      
rbu_data.image_update_buffer_size = size;
d91efe52 drivers/platform/x86/dell_rbu.c Christoph Hellwig 2019-01-29  452      
rbu_data.bios_image_size = rbu_data.image_update_buffer_size;
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  453      
rbu_data.image_update_ordernum = ordernum;
d91efe52 drivers/platform/x86/dell_rbu.c Christoph Hellwig 2019-01-29 @454      
return 0;
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  455  }
6c54c28e drivers/firmware/dell_rbu.c     Abhay Salunke     2005-09-06  456  

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
_______________________________________________
kbuild mailing list
kbuild@lists.01.org
https://lists.01.org/mailman/listinfo/kbuild

Reply via email to