Not sure how well this is going to be formatted, but there's one new and potentially interesting issue found by Coverity.
~Andrew ----8<---- New defect(s) Reported-by: Coverity Scan Showing 1 of 1 defect(s) ** CID 1592633: (LOCK_EVASION) /xen/drivers/vpci/header.c: 229 in vpci_process_pending() /xen/drivers/vpci/header.c: 189 in vpci_process_pending() /xen/drivers/vpci/header.c: 239 in vpci_process_pending() ________________________________________________________________________________________________________ *** CID 1592633: (LOCK_EVASION) /xen/drivers/vpci/header.c: 229 in vpci_process_pending() 223 224 /* Clean all the rangesets */ 225 for ( i = 0; i < ARRAY_SIZE(header->bars); i++ ) 226 if ( !rangeset_is_empty(header->bars[i].mem) ) 227 rangeset_purge(header->bars[i].mem); 228 >>> CID 1592633: (LOCK_EVASION) >>> Thread1 sets "pdev" to a new value. Now the two threads have an >>> inconsistent view of "pdev" and updates to fields of "pdev" or >>> fields correlated with "pdev" may be lost. 229 v->vpci.pdev = NULL; 230 231 read_unlock(&v->domain->pci_lock); 232 233 if ( !is_hardware_domain(v->domain) ) 234 domain_crash(v->domain); /xen/drivers/vpci/header.c: 189 in vpci_process_pending() 183 return false; 184 185 read_lock(&v->domain->pci_lock); 186 187 if ( !pdev->vpci || (v->domain != pdev->domain) ) 188 { >>> CID 1592633: (LOCK_EVASION) >>> Thread1 sets "pdev" to a new value. Now the two threads have an >>> inconsistent view of "pdev" and updates to fields of "pdev" or >>> fields correlated with "pdev" may be lost. 189 v->vpci.pdev = NULL; 190 read_unlock(&v->domain->pci_lock); 191 return false; 192 } 193 194 header = &pdev->vpci->header; /xen/drivers/vpci/header.c: 239 in vpci_process_pending() 233 if ( !is_hardware_domain(v->domain) ) 234 domain_crash(v->domain); 235 236 return false; 237 } 238 } >>> CID 1592633: (LOCK_EVASION) >>> Thread1 sets "pdev" to a new value. Now the two threads have an >>> inconsistent view of "pdev" and updates to fields of "pdev" or >>> fields correlated with "pdev" may be lost. 239 v->vpci.pdev = NULL; 240 241 spin_lock(&pdev->vpci->lock); 242 modify_decoding(pdev, v->vpci.cmd, v->vpci.rom_only); 243 spin_unlock(&pdev->vpci->lock); 244