CC: [email protected]
CC: Alison Schofield <[email protected]>
CC: Vishal Verma <[email protected]>
CC: Ira Weiny <[email protected]>
CC: Ben Widawsky <[email protected]>
CC: Dan Williams <[email protected]>
CC: [email protected]
TO: Dan Williams <[email protected]>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/cxl/cxl.git preview
head:   41c2d219a2c8e14de644f4e953e0c57402c3e884
commit: 1bb1c2110c968b3fdca7b37afbd0594d8e82715e [32/60] cxl/core/port: Add 
switch port enumeration
:::::: branch date: 2 weeks ago
:::::: commit date: 2 weeks ago
config: x86_64-randconfig-c022 
(https://download.01.org/0day-ci/archive/20220209/[email protected]/config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0

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


cocci warnings: (new ones prefixed by >>)
>> drivers/cxl/core/port.c:809:21-24: ERROR: port is NULL but dereferenced.

vim +809 drivers/cxl/core/port.c

1bb1c2110c968b3 Dan Williams 2022-01-21  792  
1bb1c2110c968b3 Dan Williams 2022-01-21  793  static void cxl_remove_ep(void 
*data)
1bb1c2110c968b3 Dan Williams 2022-01-21  794  {
1bb1c2110c968b3 Dan Williams 2022-01-21  795    struct cxl_memdev *cxlmd = data;
1bb1c2110c968b3 Dan Williams 2022-01-21  796    struct device *iter;
1bb1c2110c968b3 Dan Williams 2022-01-21  797  
1bb1c2110c968b3 Dan Williams 2022-01-21  798    for (iter = &cxlmd->dev; iter; 
iter = grandparent(iter)) {
1bb1c2110c968b3 Dan Williams 2022-01-21  799            struct device 
*dport_dev = grandparent(iter);
1bb1c2110c968b3 Dan Williams 2022-01-21  800            struct cxl_port *port, 
*parent_port;
1bb1c2110c968b3 Dan Williams 2022-01-21  801            LIST_HEAD(reap_dports);
1bb1c2110c968b3 Dan Williams 2022-01-21  802            struct cxl_ep *ep;
1bb1c2110c968b3 Dan Williams 2022-01-21  803  
1bb1c2110c968b3 Dan Williams 2022-01-21  804            if (!dport_dev)
1bb1c2110c968b3 Dan Williams 2022-01-21  805                    break;
1bb1c2110c968b3 Dan Williams 2022-01-21  806  
1bb1c2110c968b3 Dan Williams 2022-01-21  807            port = 
find_cxl_port(dport_dev);
1bb1c2110c968b3 Dan Williams 2022-01-21  808            if (!port || 
is_cxl_root(port)) {
1bb1c2110c968b3 Dan Williams 2022-01-21 @809                    
put_device(&port->dev);
1bb1c2110c968b3 Dan Williams 2022-01-21  810                    continue;
1bb1c2110c968b3 Dan Williams 2022-01-21  811            }
1bb1c2110c968b3 Dan Williams 2022-01-21  812  
1bb1c2110c968b3 Dan Williams 2022-01-21  813            parent_port = 
to_cxl_port(port->dev.parent);
1bb1c2110c968b3 Dan Williams 2022-01-21  814            
cxl_device_lock(&parent_port->dev);
1bb1c2110c968b3 Dan Williams 2022-01-21  815            if 
(!parent_port->dev.driver) {
1bb1c2110c968b3 Dan Williams 2022-01-21  816                    
cxl_device_unlock(&parent_port->dev);
1bb1c2110c968b3 Dan Williams 2022-01-21  817                    
put_device(&port->dev);
1bb1c2110c968b3 Dan Williams 2022-01-21  818                    continue;
1bb1c2110c968b3 Dan Williams 2022-01-21  819            }
1bb1c2110c968b3 Dan Williams 2022-01-21  820  
1bb1c2110c968b3 Dan Williams 2022-01-21  821            
cxl_device_lock(&port->dev);
1bb1c2110c968b3 Dan Williams 2022-01-21  822            ep = find_ep(port, 
&cxlmd->dev);
1bb1c2110c968b3 Dan Williams 2022-01-21  823            dev_dbg(&cxlmd->dev, 
"disconnect %s from %s\n",
1bb1c2110c968b3 Dan Williams 2022-01-21  824                    ep ? 
dev_name(ep->ep) : "", dev_name(&port->dev));
1bb1c2110c968b3 Dan Williams 2022-01-21  825            cxl_ep_release(ep);
1bb1c2110c968b3 Dan Williams 2022-01-21  826            if (ep && !port->dead 
&& list_empty(&port->endpoints) &&
1bb1c2110c968b3 Dan Williams 2022-01-21  827                
!is_cxl_root(parent_port)) {
1bb1c2110c968b3 Dan Williams 2022-01-21  828                    /*
1bb1c2110c968b3 Dan Williams 2022-01-21  829                     * This was the 
last ep attached to a dynamically
1bb1c2110c968b3 Dan Williams 2022-01-21  830                     * enumerated 
port. Block new cxl_add_ep() and garbage
1bb1c2110c968b3 Dan Williams 2022-01-21  831                     * collect the 
port.
1bb1c2110c968b3 Dan Williams 2022-01-21  832                     */
1bb1c2110c968b3 Dan Williams 2022-01-21  833                    port->dead = 
true;
1bb1c2110c968b3 Dan Williams 2022-01-21  834                    
list_splice_init(&port->dports, &reap_dports);
1bb1c2110c968b3 Dan Williams 2022-01-21  835            }
1bb1c2110c968b3 Dan Williams 2022-01-21  836            
cxl_device_unlock(&port->dev);
1bb1c2110c968b3 Dan Williams 2022-01-21  837  
1bb1c2110c968b3 Dan Williams 2022-01-21  838            if 
(!list_empty(&reap_dports))
1bb1c2110c968b3 Dan Williams 2022-01-21  839                    
delete_switch_port(cxlmd, port, &reap_dports);
1bb1c2110c968b3 Dan Williams 2022-01-21  840            put_device(&port->dev);
1bb1c2110c968b3 Dan Williams 2022-01-21  841            
cxl_device_unlock(&parent_port->dev);
1bb1c2110c968b3 Dan Williams 2022-01-21  842    }
1bb1c2110c968b3 Dan Williams 2022-01-21  843  }
1bb1c2110c968b3 Dan Williams 2022-01-21  844  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]
_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to