CC: [email protected]
CC: [email protected]
TO: Christoph Hellwig <[email protected]>
CC: Thomas Gleixner <[email protected]>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 
master
head:   fc4f28bb3daf3265d6bc5f73b497306985bb23ab
commit: c0d94aa54bd893bd41ca35e2a2de332742bb167d x86: Clean up ioremap()
date:   10 months ago
:::::: branch date: 35 hours ago
:::::: commit date: 10 months ago
config: x86_64-randconfig-m001-20200916 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>
Reported-by: Dan Carpenter <[email protected]>

New smatch warnings:
drivers/mtd/maps/amd76xrom.c:289 amd76xrom_init_one() warn: 'window->virt' not 
released on lines: 287.

Old smatch warnings:
drivers/mtd/maps/amd76xrom.c:289 amd76xrom_init_one() warn: '&iomem_resource' 
not released on lines: 287.

# 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c0d94aa54bd893bd41ca35e2a2de332742bb167d
git remote add linus 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
git fetch --no-tags linus master
git checkout c0d94aa54bd893bd41ca35e2a2de332742bb167d
vim +289 drivers/mtd/maps/amd76xrom.c

^1da177e4c3f41 Linus Torvalds     2005-04-16  102  
^1da177e4c3f41 Linus Torvalds     2005-04-16  103  
06f25510692385 Bill Pemberton     2012-11-19  104  static int 
amd76xrom_init_one(struct pci_dev *pdev,
^1da177e4c3f41 Linus Torvalds     2005-04-16  105                             
const struct pci_device_id *ent)
^1da177e4c3f41 Linus Torvalds     2005-04-16  106  {
^1da177e4c3f41 Linus Torvalds     2005-04-16  107       static char 
*rom_probe_types[] = { "cfi_probe", "jedec_probe", NULL };
^1da177e4c3f41 Linus Torvalds     2005-04-16  108       u8 byte;
^1da177e4c3f41 Linus Torvalds     2005-04-16  109       struct amd76xrom_window 
*window = &amd76xrom_window;
^1da177e4c3f41 Linus Torvalds     2005-04-16  110       struct 
amd76xrom_map_info *map = NULL;
^1da177e4c3f41 Linus Torvalds     2005-04-16  111       unsigned long map_top;
^1da177e4c3f41 Linus Torvalds     2005-04-16  112  
dd8e9ed6ed544e Alan Cox           2006-09-22  113       /* Remember the pci dev 
I find the window in - already have a ref */
^1da177e4c3f41 Linus Torvalds     2005-04-16  114       window->pdev = pdev;
^1da177e4c3f41 Linus Torvalds     2005-04-16  115  
c9073ce02adfa2 Ryan Jackson       2006-10-20  116       /* Enable the selected 
rom window.  This is often incorrectly
c9073ce02adfa2 Ryan Jackson       2006-10-20  117        * set up by the BIOS, 
and the 4MiB offset for the lock registers
c9073ce02adfa2 Ryan Jackson       2006-10-20  118        * requires the full 
5MiB of window space.
c9073ce02adfa2 Ryan Jackson       2006-10-20  119        *
c9073ce02adfa2 Ryan Jackson       2006-10-20  120        * This 'write, then 
read' approach leaves the bits for
c9073ce02adfa2 Ryan Jackson       2006-10-20  121        * other uses of the 
hardware info.
c9073ce02adfa2 Ryan Jackson       2006-10-20  122        */
c9073ce02adfa2 Ryan Jackson       2006-10-20  123       
pci_read_config_byte(pdev, 0x43, &byte);
c9073ce02adfa2 Ryan Jackson       2006-10-20  124       
pci_write_config_byte(pdev, 0x43, byte | win_size_bits );
c9073ce02adfa2 Ryan Jackson       2006-10-20  125  
^1da177e4c3f41 Linus Torvalds     2005-04-16  126       /* Assume the rom 
window is properly setup, and find it's size */
^1da177e4c3f41 Linus Torvalds     2005-04-16  127       
pci_read_config_byte(pdev, 0x43, &byte);
^1da177e4c3f41 Linus Torvalds     2005-04-16  128       if ((byte & 
((1<<7)|(1<<6))) == ((1<<7)|(1<<6))) {
^1da177e4c3f41 Linus Torvalds     2005-04-16  129               window->phys = 
0xffb00000; /* 5MiB */
^1da177e4c3f41 Linus Torvalds     2005-04-16  130       }
^1da177e4c3f41 Linus Torvalds     2005-04-16  131       else if ((byte & 
(1<<7)) == (1<<7)) {
^1da177e4c3f41 Linus Torvalds     2005-04-16  132               window->phys = 
0xffc00000; /* 4MiB */
^1da177e4c3f41 Linus Torvalds     2005-04-16  133       }
^1da177e4c3f41 Linus Torvalds     2005-04-16  134       else {
^1da177e4c3f41 Linus Torvalds     2005-04-16  135               window->phys = 
0xffff0000; /* 64KiB */
^1da177e4c3f41 Linus Torvalds     2005-04-16  136       }
^1da177e4c3f41 Linus Torvalds     2005-04-16  137       window->size = 
0xffffffffUL - window->phys + 1UL;
^1da177e4c3f41 Linus Torvalds     2005-04-16  138  
^1da177e4c3f41 Linus Torvalds     2005-04-16  139       /*
^1da177e4c3f41 Linus Torvalds     2005-04-16  140        * Try to reserve the 
window mem region.  If this fails then
^1da177e4c3f41 Linus Torvalds     2005-04-16  141        * it is likely due to 
a fragment of the window being
01d0afddf37cbb Geert Uytterhoeven 2015-05-21  142        * "reserved" by the 
BIOS.  In the case that the
^1da177e4c3f41 Linus Torvalds     2005-04-16  143        * request_mem_region() 
fails then once the rom size is
^1da177e4c3f41 Linus Torvalds     2005-04-16  144        * discovered we will 
try to reserve the unreserved fragment.
^1da177e4c3f41 Linus Torvalds     2005-04-16  145        */
^1da177e4c3f41 Linus Torvalds     2005-04-16  146       window->rsrc.name = 
MOD_NAME;
^1da177e4c3f41 Linus Torvalds     2005-04-16  147       window->rsrc.start = 
window->phys;
^1da177e4c3f41 Linus Torvalds     2005-04-16  148       window->rsrc.end   = 
window->phys + window->size - 1;
^1da177e4c3f41 Linus Torvalds     2005-04-16  149       window->rsrc.flags = 
IORESOURCE_MEM | IORESOURCE_BUSY;
^1da177e4c3f41 Linus Torvalds     2005-04-16  150       if 
(request_resource(&iomem_resource, &window->rsrc)) {
^1da177e4c3f41 Linus Torvalds     2005-04-16  151               
window->rsrc.parent = NULL;
^1da177e4c3f41 Linus Torvalds     2005-04-16  152               printk(KERN_ERR 
MOD_NAME
f9a5279c70af10 Joe Perches        2010-11-12  153                      " %s(): 
Unable to register resource %pR - kernel bug?\n",
f9a5279c70af10 Joe Perches        2010-11-12  154                      
__func__, &window->rsrc);
82013d988fc03a Stanislaw Gruszka  2011-01-08  155               return -EBUSY;
^1da177e4c3f41 Linus Torvalds     2005-04-16  156       }
^1da177e4c3f41 Linus Torvalds     2005-04-16  157  
^1da177e4c3f41 Linus Torvalds     2005-04-16  158  
^1da177e4c3f41 Linus Torvalds     2005-04-16  159       /* Enable writes 
through the rom window */
^1da177e4c3f41 Linus Torvalds     2005-04-16  160       
pci_read_config_byte(pdev, 0x40, &byte);
^1da177e4c3f41 Linus Torvalds     2005-04-16  161       
pci_write_config_byte(pdev, 0x40, byte | 1);
^1da177e4c3f41 Linus Torvalds     2005-04-16  162  
^1da177e4c3f41 Linus Torvalds     2005-04-16  163       /* FIXME handle 
registers 0x80 - 0x8C the bios region locks */
^1da177e4c3f41 Linus Torvalds     2005-04-16  164  
^1da177e4c3f41 Linus Torvalds     2005-04-16  165       /* For write accesses 
caches are useless */
^1da177e4c3f41 Linus Torvalds     2005-04-16  166       window->virt = 
ioremap_nocache(window->phys, window->size);
^1da177e4c3f41 Linus Torvalds     2005-04-16  167       if (!window->virt) {
^1da177e4c3f41 Linus Torvalds     2005-04-16  168               printk(KERN_ERR 
MOD_NAME ": ioremap(%08lx, %08lx) failed\n",
^1da177e4c3f41 Linus Torvalds     2005-04-16  169                       
window->phys, window->size);
^1da177e4c3f41 Linus Torvalds     2005-04-16  170               goto out;
^1da177e4c3f41 Linus Torvalds     2005-04-16  171       }
^1da177e4c3f41 Linus Torvalds     2005-04-16  172  
^1da177e4c3f41 Linus Torvalds     2005-04-16  173       /* Get the first 
address to look for an rom chip at */
^1da177e4c3f41 Linus Torvalds     2005-04-16  174       map_top = window->phys;
^1da177e4c3f41 Linus Torvalds     2005-04-16  175  #if 1
^1da177e4c3f41 Linus Torvalds     2005-04-16  176       /* The probe sequence 
run over the firmware hub lock
^1da177e4c3f41 Linus Torvalds     2005-04-16  177        * registers sets them 
to 0x7 (no access).
^1da177e4c3f41 Linus Torvalds     2005-04-16  178        * Probe at most the 
last 4M of the address space.
^1da177e4c3f41 Linus Torvalds     2005-04-16  179        */
^1da177e4c3f41 Linus Torvalds     2005-04-16  180       if (map_top < 
0xffc00000) {
^1da177e4c3f41 Linus Torvalds     2005-04-16  181               map_top = 
0xffc00000;
^1da177e4c3f41 Linus Torvalds     2005-04-16  182       }
^1da177e4c3f41 Linus Torvalds     2005-04-16  183  #endif
^1da177e4c3f41 Linus Torvalds     2005-04-16  184       /* Loop  through and 
look for rom chips */
^1da177e4c3f41 Linus Torvalds     2005-04-16  185       while((map_top - 1) < 
0xffffffffUL) {
^1da177e4c3f41 Linus Torvalds     2005-04-16  186               struct 
cfi_private *cfi;
^1da177e4c3f41 Linus Torvalds     2005-04-16  187               unsigned long 
offset;
^1da177e4c3f41 Linus Torvalds     2005-04-16  188               int i;
^1da177e4c3f41 Linus Torvalds     2005-04-16  189  
^1da177e4c3f41 Linus Torvalds     2005-04-16  190               if (!map) {
^1da177e4c3f41 Linus Torvalds     2005-04-16  191                       map = 
kmalloc(sizeof(*map), GFP_KERNEL);
^1da177e4c3f41 Linus Torvalds     2005-04-16  192               }
^1da177e4c3f41 Linus Torvalds     2005-04-16  193               if (!map) {
^1da177e4c3f41 Linus Torvalds     2005-04-16  194                       
printk(KERN_ERR MOD_NAME ": kmalloc failed");
^1da177e4c3f41 Linus Torvalds     2005-04-16  195                       goto 
out;
^1da177e4c3f41 Linus Torvalds     2005-04-16  196               }
^1da177e4c3f41 Linus Torvalds     2005-04-16  197               memset(map, 0, 
sizeof(*map));
^1da177e4c3f41 Linus Torvalds     2005-04-16  198               
INIT_LIST_HEAD(&map->list);
^1da177e4c3f41 Linus Torvalds     2005-04-16  199               map->map.name = 
map->map_name;
^1da177e4c3f41 Linus Torvalds     2005-04-16  200               map->map.phys = 
map_top;
^1da177e4c3f41 Linus Torvalds     2005-04-16  201               offset = 
map_top - window->phys;
^1da177e4c3f41 Linus Torvalds     2005-04-16  202               map->map.virt = 
(void __iomem *)
^1da177e4c3f41 Linus Torvalds     2005-04-16  203                       
(((unsigned long)(window->virt)) + offset);
^1da177e4c3f41 Linus Torvalds     2005-04-16  204               map->map.size = 
0xffffffffUL - map_top + 1UL;
^1da177e4c3f41 Linus Torvalds     2005-04-16  205               /* Set the name 
of the map to the address I am trying */
1a6284cb6f44b2 Andrew Morton      2007-02-17  206               
sprintf(map->map_name, "%s @%08Lx",
1a6284cb6f44b2 Andrew Morton      2007-02-17  207                       
MOD_NAME, (unsigned long long)map->map.phys);
^1da177e4c3f41 Linus Torvalds     2005-04-16  208  
^1da177e4c3f41 Linus Torvalds     2005-04-16  209               /* There is no 
generic VPP support */
^1da177e4c3f41 Linus Torvalds     2005-04-16  210               
for(map->map.bankwidth = 32; map->map.bankwidth;
^1da177e4c3f41 Linus Torvalds     2005-04-16  211                       
map->map.bankwidth >>= 1)
^1da177e4c3f41 Linus Torvalds     2005-04-16  212               {
^1da177e4c3f41 Linus Torvalds     2005-04-16  213                       char 
**probe_type;
^1da177e4c3f41 Linus Torvalds     2005-04-16  214                       /* Skip 
bankwidths that are not supported */
^1da177e4c3f41 Linus Torvalds     2005-04-16  215                       if 
(!map_bankwidth_supported(map->map.bankwidth))
^1da177e4c3f41 Linus Torvalds     2005-04-16  216                               
continue;
^1da177e4c3f41 Linus Torvalds     2005-04-16  217  
^1da177e4c3f41 Linus Torvalds     2005-04-16  218                       /* 
Setup the map methods */
^1da177e4c3f41 Linus Torvalds     2005-04-16  219                       
simple_map_init(&map->map);
^1da177e4c3f41 Linus Torvalds     2005-04-16  220  
^1da177e4c3f41 Linus Torvalds     2005-04-16  221                       /* Try 
all of the probe methods */
^1da177e4c3f41 Linus Torvalds     2005-04-16  222                       
probe_type = rom_probe_types;
^1da177e4c3f41 Linus Torvalds     2005-04-16  223                       for(; 
*probe_type; probe_type++) {
^1da177e4c3f41 Linus Torvalds     2005-04-16  224                               
map->mtd = do_map_probe(*probe_type, &map->map);
^1da177e4c3f41 Linus Torvalds     2005-04-16  225                               
if (map->mtd)
^1da177e4c3f41 Linus Torvalds     2005-04-16  226                               
        goto found;
^1da177e4c3f41 Linus Torvalds     2005-04-16  227                       }
^1da177e4c3f41 Linus Torvalds     2005-04-16  228               }
^1da177e4c3f41 Linus Torvalds     2005-04-16  229               map_top += 
ROM_PROBE_STEP_SIZE;
^1da177e4c3f41 Linus Torvalds     2005-04-16  230               continue;
^1da177e4c3f41 Linus Torvalds     2005-04-16  231       found:
^1da177e4c3f41 Linus Torvalds     2005-04-16  232               /* Trim the 
size if we are larger than the map */
^1da177e4c3f41 Linus Torvalds     2005-04-16  233               if 
(map->mtd->size > map->map.size) {
^1da177e4c3f41 Linus Torvalds     2005-04-16  234                       
printk(KERN_WARNING MOD_NAME
69423d99fc182a Adrian Hunter      2008-12-10  235                               
" rom(%llu) larger than window(%lu). fixing...\n",
69423d99fc182a Adrian Hunter      2008-12-10  236                               
(unsigned long long)map->mtd->size, map->map.size);
^1da177e4c3f41 Linus Torvalds     2005-04-16  237                       
map->mtd->size = map->map.size;
^1da177e4c3f41 Linus Torvalds     2005-04-16  238               }
^1da177e4c3f41 Linus Torvalds     2005-04-16  239               if 
(window->rsrc.parent) {
^1da177e4c3f41 Linus Torvalds     2005-04-16  240                       /*
^1da177e4c3f41 Linus Torvalds     2005-04-16  241                        * 
Registering the MTD device in iomem may not be possible
^1da177e4c3f41 Linus Torvalds     2005-04-16  242                        * if 
there is a BIOS "reserved" and BUSY range.  If this
^1da177e4c3f41 Linus Torvalds     2005-04-16  243                        * 
fails then continue anyway.
^1da177e4c3f41 Linus Torvalds     2005-04-16  244                        */
^1da177e4c3f41 Linus Torvalds     2005-04-16  245                       
map->rsrc.name  = map->map_name;
^1da177e4c3f41 Linus Torvalds     2005-04-16  246                       
map->rsrc.start = map->map.phys;
^1da177e4c3f41 Linus Torvalds     2005-04-16  247                       
map->rsrc.end   = map->map.phys + map->mtd->size - 1;
^1da177e4c3f41 Linus Torvalds     2005-04-16  248                       
map->rsrc.flags = IORESOURCE_MEM | IORESOURCE_BUSY;
^1da177e4c3f41 Linus Torvalds     2005-04-16  249                       if 
(request_resource(&window->rsrc, &map->rsrc)) {
^1da177e4c3f41 Linus Torvalds     2005-04-16  250                               
printk(KERN_ERR MOD_NAME
^1da177e4c3f41 Linus Torvalds     2005-04-16  251                               
        ": cannot reserve MTD resource\n");
^1da177e4c3f41 Linus Torvalds     2005-04-16  252                               
map->rsrc.parent = NULL;
^1da177e4c3f41 Linus Torvalds     2005-04-16  253                       }
^1da177e4c3f41 Linus Torvalds     2005-04-16  254               }
^1da177e4c3f41 Linus Torvalds     2005-04-16  255  
^1da177e4c3f41 Linus Torvalds     2005-04-16  256               /* Make the 
whole region visible in the map */
^1da177e4c3f41 Linus Torvalds     2005-04-16  257               map->map.virt = 
window->virt;
^1da177e4c3f41 Linus Torvalds     2005-04-16  258               map->map.phys = 
window->phys;
^1da177e4c3f41 Linus Torvalds     2005-04-16  259               cfi = 
map->map.fldrv_priv;
^1da177e4c3f41 Linus Torvalds     2005-04-16  260               for(i = 0; i < 
cfi->numchips; i++) {
^1da177e4c3f41 Linus Torvalds     2005-04-16  261                       
cfi->chips[i].start += offset;
^1da177e4c3f41 Linus Torvalds     2005-04-16  262               }
^1da177e4c3f41 Linus Torvalds     2005-04-16  263  
^1da177e4c3f41 Linus Torvalds     2005-04-16  264               /* Now that the 
mtd devices is complete claim and export it */
^1da177e4c3f41 Linus Torvalds     2005-04-16  265               map->mtd->owner 
= THIS_MODULE;
ee0e87b174bb41 Jamie Iles         2011-05-23  266               if 
(mtd_device_register(map->mtd, NULL, 0)) {
^1da177e4c3f41 Linus Torvalds     2005-04-16  267                       
map_destroy(map->mtd);
^1da177e4c3f41 Linus Torvalds     2005-04-16  268                       
map->mtd = NULL;
^1da177e4c3f41 Linus Torvalds     2005-04-16  269                       goto 
out;
^1da177e4c3f41 Linus Torvalds     2005-04-16  270               }
^1da177e4c3f41 Linus Torvalds     2005-04-16  271  
^1da177e4c3f41 Linus Torvalds     2005-04-16  272  
^1da177e4c3f41 Linus Torvalds     2005-04-16  273               /* Calculate 
the new value of map_top */
^1da177e4c3f41 Linus Torvalds     2005-04-16  274               map_top += 
map->mtd->size;
^1da177e4c3f41 Linus Torvalds     2005-04-16  275  
^1da177e4c3f41 Linus Torvalds     2005-04-16  276               /* File away 
the map structure */
^1da177e4c3f41 Linus Torvalds     2005-04-16  277               
list_add(&map->list, &window->maps);
^1da177e4c3f41 Linus Torvalds     2005-04-16  278               map = NULL;
^1da177e4c3f41 Linus Torvalds     2005-04-16  279       }
^1da177e4c3f41 Linus Torvalds     2005-04-16  280  
^1da177e4c3f41 Linus Torvalds     2005-04-16  281   out:
^1da177e4c3f41 Linus Torvalds     2005-04-16  282       /* Free any left over 
map structures */
^1da177e4c3f41 Linus Torvalds     2005-04-16  283       kfree(map);
^1da177e4c3f41 Linus Torvalds     2005-04-16  284       /* See if I have any 
map structures */
^1da177e4c3f41 Linus Torvalds     2005-04-16  285       if 
(list_empty(&window->maps)) {
^1da177e4c3f41 Linus Torvalds     2005-04-16  286               
amd76xrom_cleanup(window);
^1da177e4c3f41 Linus Torvalds     2005-04-16  287               return -ENODEV;
^1da177e4c3f41 Linus Torvalds     2005-04-16  288       }
^1da177e4c3f41 Linus Torvalds     2005-04-16 @289       return 0;
^1da177e4c3f41 Linus Torvalds     2005-04-16  290  }
^1da177e4c3f41 Linus Torvalds     2005-04-16  291  

:::::: The code at line 289 was first introduced by commit
:::::: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 Linux-2.6.12-rc2

:::::: TO: Linus Torvalds <[email protected]>
:::::: CC: Linus Torvalds <[email protected]>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]

Attachment: .config.gz
Description: application/gzip

_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to