CC: [email protected]
CC: [email protected]
BCC: [email protected]
CC: Linux Memory Management List <[email protected]>
TO: Bjorn Helgaas <[email protected]>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git 
master
head:   a32cd981a6da2373c093d471ee4405a915e217d5
commit: 1d38fe6ee6a874675ca3bba6b48e69a0e6176ffc [11036/12845] PCI/VGA: Move 
vgaarb to drivers/pci
:::::: branch date: 12 hours ago
:::::: commit date: 6 days ago
config: x86_64-randconfig-c007 
(https://download.01.org/0day-ci/archive/20220316/[email protected]/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 
a6b2f50fb47da3baeee10b1906da6e30ac5d26ec)
reproduce (this is a W=1 build):
        wget 
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O 
~/bin/make.cross
        chmod +x ~/bin/make.cross
        # 
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=1d38fe6ee6a874675ca3bba6b48e69a0e6176ffc
        git remote add linux-next 
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
        git fetch --no-tags linux-next master
        git checkout 1d38fe6ee6a874675ca3bba6b48e69a0e6176ffc
        # save the config file to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64 
clang-analyzer 

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


clang-analyzer warnings: (new ones prefixed by >>)
   fs/xfs/libxfs/xfs_rmap.c:2677:9: note: Assuming the condition is false
           ASSERT(XFS_RMAP_NON_INODE_OWNER(owner) ||
                  ^
   fs/xfs/libxfs/xfs_format.h:1433:43: note: expanded from macro 
'XFS_RMAP_NON_INODE_OWNER'
   #define XFS_RMAP_NON_INODE_OWNER(owner) (!!((owner) & (1ULL << 63)))
                                             ^
   fs/xfs/xfs_linux.h:208:10: note: expanded from macro 'ASSERT'
           (likely(expr) ? (void)0 : assfail(NULL, #expr, __FILE__, __LINE__))
            ~~~~~~~^~~~~
   include/linux/compiler.h:77:40: note: expanded from macro 'likely'
   # define likely(x)      __builtin_expect(!!(x), 1)
                                               ^
   fs/xfs/libxfs/xfs_rmap.c:2677:41: note: Left side of '||' is true
           ASSERT(XFS_RMAP_NON_INODE_OWNER(owner) ||
                                                  ^
   fs/xfs/libxfs/xfs_rmap.c:2677:2: note: '?' condition is true
           ASSERT(XFS_RMAP_NON_INODE_OWNER(owner) ||
           ^
   fs/xfs/xfs_linux.h:208:3: note: expanded from macro 'ASSERT'
           (likely(expr) ? (void)0 : assfail(NULL, #expr, __FILE__, __LINE__))
            ^
   include/linux/compiler.h:77:20: note: expanded from macro 'likely'
   # define likely(x)      __builtin_expect(!!(x), 1)
                           ^
   fs/xfs/libxfs/xfs_rmap.c:2682:6: note: Assuming 'error' is 0
           if (error)
               ^~~~~
   fs/xfs/libxfs/xfs_rmap.c:2682:2: note: Taking false branch
           if (error)
           ^
   fs/xfs/libxfs/xfs_rmap.c:2684:6: note: Assuming 'has_record' is not equal to 0
           if (!has_record) {
               ^~~~~~~~~~~
   fs/xfs/libxfs/xfs_rmap.c:2684:2: note: Taking false branch
           if (!has_record) {
           ^
   fs/xfs/libxfs/xfs_rmap.c:2689:10: note: Calling 'xfs_rmap_get_rec'
           error = xfs_rmap_get_rec(cur, &irec, &has_record);
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/xfs/libxfs/xfs_rmap.c:209:6: note: Assuming 'error' is 0
           if (error || !*stat)
               ^~~~~
   fs/xfs/libxfs/xfs_rmap.c:209:6: note: Left side of '||' is false
   fs/xfs/libxfs/xfs_rmap.c:209:15: note: Assuming the condition is false
           if (error || !*stat)
                        ^~~~~~
   fs/xfs/libxfs/xfs_rmap.c:209:2: note: Taking false branch
           if (error || !*stat)
           ^
   fs/xfs/libxfs/xfs_rmap.c:212:6: note: Calling 'xfs_rmap_btrec_to_irec'
           if (xfs_rmap_btrec_to_irec(rec, irec))
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/xfs/libxfs/xfs_rmap.c:190:9: note: Calling 'xfs_rmap_irec_offset_unpack'
           return xfs_rmap_irec_offset_unpack(be64_to_cpu(rec->rmap.rm_offset),
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/xfs/libxfs/xfs_rmap.h:70:6: note: Assuming the condition is true
           if (offset & ~(XFS_RMAP_OFF_MASK | XFS_RMAP_OFF_FLAGS))
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/xfs/libxfs/xfs_rmap.h:70:2: note: Taking true branch
           if (offset & ~(XFS_RMAP_OFF_MASK | XFS_RMAP_OFF_FLAGS))
           ^
   fs/xfs/libxfs/xfs_rmap.h:71:3: note: Returning without writing to 
'irec->rm_flags'
                   return -EFSCORRUPTED;
                   ^
   fs/xfs/libxfs/xfs_rmap.h:71:3: note: Returning the value -117, which 
participates in a condition later
                   return -EFSCORRUPTED;
                   ^~~~~~~~~~~~~~~~~~~~
   fs/xfs/libxfs/xfs_rmap.c:190:9: note: Returning from 
'xfs_rmap_irec_offset_unpack'
           return xfs_rmap_irec_offset_unpack(be64_to_cpu(rec->rmap.rm_offset),
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/xfs/libxfs/xfs_rmap.c:190:2: note: Returning without writing to 
'irec->rm_flags'
           return xfs_rmap_irec_offset_unpack(be64_to_cpu(rec->rmap.rm_offset),
           ^
   fs/xfs/libxfs/xfs_rmap.c:190:2: note: Returning the value -117, which 
participates in a condition later
           return xfs_rmap_irec_offset_unpack(be64_to_cpu(rec->rmap.rm_offset),
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/xfs/libxfs/xfs_rmap.c:212:6: note: Returning from 'xfs_rmap_btrec_to_irec'
           if (xfs_rmap_btrec_to_irec(rec, irec))
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/xfs/libxfs/xfs_rmap.c:212:2: note: Taking true branch
           if (xfs_rmap_btrec_to_irec(rec, irec))
           ^
   fs/xfs/libxfs/xfs_rmap.c:213:3: note: Control jumps to line 241
                   goto out_bad_rec;
                   ^
   fs/xfs/libxfs/xfs_rmap.c:244:2: note: 4th function call argument is an 
uninitialized value
           xfs_warn(mp,
           ^
   Suppressed 5 warnings (5 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   4 warnings generated.
   Suppressed 4 warnings (4 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   4 warnings generated.
   Suppressed 4 warnings (4 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   4 warnings generated.
   Suppressed 4 warnings (4 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   6 warnings generated.
>> drivers/pci/vgaarb.c:235:17: warning: Value stored to 'dev' during its 
>> initialization is never read [clang-analyzer-deadcode.DeadStores]
           struct device *dev = &vgadev->pdev->dev;
                          ^~~   ~~~~~~~~~~~~~~~~~~
   drivers/pci/vgaarb.c:235:17: note: Value stored to 'dev' during its 
initialization is never read
           struct device *dev = &vgadev->pdev->dev;
                          ^~~   ~~~~~~~~~~~~~~~~~~
   drivers/pci/vgaarb.c:373:17: warning: Value stored to 'dev' during its 
initialization is never read [clang-analyzer-deadcode.DeadStores]
           struct device *dev = &vgadev->pdev->dev;
                          ^~~   ~~~~~~~~~~~~~~~~~~
   drivers/pci/vgaarb.c:373:17: note: Value stored to 'dev' during its 
initialization is never read
           struct device *dev = &vgadev->pdev->dev;
                          ^~~   ~~~~~~~~~~~~~~~~~~
   Suppressed 4 warnings (4 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   4 warnings generated.
   Suppressed 4 warnings (4 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   4 warnings generated.
   Suppressed 4 warnings (4 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   9 warnings generated.
   drivers/greybus/manifest.c:56:2: warning: Use of memory after it is freed 
[clang-analyzer-unix.Malloc]
           list_for_each_entry_safe(descriptor, next, &intf->manifest_descs, 
links)
           ^
   include/linux/list.h:728:20: note: expanded from macro 
'list_for_each_entry_safe'
                pos = n, n = list_next_entry(n, member))
                             ^
   include/linux/list.h:564:2: note: expanded from macro 'list_next_entry'
           list_entry((pos)->member.next, typeof(*(pos)), member)
           ^
   include/linux/list.h:520:2: note: expanded from macro 'list_entry'
           container_of(ptr, type, member)
           ^
   include/linux/container_of.h:18:25: note: expanded from macro 'container_of'
           void *__mptr = (void *)(ptr);                                   \
                                  ^
   drivers/greybus/manifest.c:464:6: note: Assuming '__ret_warn_on' is 0
           if (WARN_ON(!list_empty(&intf->manifest_descs)))
               ^
   include/asm-generic/bug.h:122:6: note: expanded from macro 'WARN_ON'
           if (unlikely(__ret_warn_on))                                    \
               ^~~~~~~~~~~~~~~~~~~~~~~
   include/linux/compiler.h:78:40: note: expanded from macro 'unlikely'
   # define unlikely(x)    __builtin_expect(!!(x), 0)
                                             ^~~~
   drivers/greybus/manifest.c:464:6: note: Taking false branch
           if (WARN_ON(!list_empty(&intf->manifest_descs)))
               ^
   include/asm-generic/bug.h:122:2: note: expanded from macro 'WARN_ON'
           if (unlikely(__ret_warn_on))                                    \
           ^
   drivers/greybus/manifest.c:464:2: note: Taking false branch
           if (WARN_ON(!list_empty(&intf->manifest_descs)))
           ^
   drivers/greybus/manifest.c:468:6: note: Assuming the condition is false
           if (size < sizeof(*header)) {
               ^~~~~~~~~~~~~~~~~~~~~~
   drivers/greybus/manifest.c:468:2: note: Taking false branch
           if (size < sizeof(*header)) {
           ^
   drivers/greybus/manifest.c:478:6: note: Assuming 'manifest_size' is equal to 
'size'
           if (manifest_size != size) {
               ^~~~~~~~~~~~~~~~~~~~~
   drivers/greybus/manifest.c:478:2: note: Taking false branch
           if (manifest_size != size) {
           ^
   drivers/greybus/manifest.c:485:6: note: Assuming field 'version_major' is <= 
GREYBUS_VERSION_MAJOR
           if (header->version_major > GREYBUS_VERSION_MAJOR) {
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/greybus/manifest.c:485:2: note: Taking false branch
           if (header->version_major > GREYBUS_VERSION_MAJOR) {
           ^
   drivers/greybus/manifest.c:495:2: note: Loop condition is false. Execution 
continues on line 508
           while (size) {
           ^
   drivers/greybus/manifest.c:508:2: note: Loop condition is true.  Entering 
loop body
           list_for_each_entry(descriptor, &intf->manifest_descs, links) {
           ^
   include/linux/list.h:638:2: note: expanded from macro 'list_for_each_entry'
           for (pos = list_first_entry(head, typeof(*pos), member);        \
           ^
   drivers/greybus/manifest.c:509:7: note: Assuming field 'type' is equal to 
GREYBUS_TYPE_INTERFACE
                   if (descriptor->type == GREYBUS_TYPE_INTERFACE)
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/greybus/manifest.c:509:3: note: Taking true branch
                   if (descriptor->type == GREYBUS_TYPE_INTERFACE)
                   ^
   drivers/greybus/manifest.c:510:4: note: Taking true branch
                           if (!found++)
                           ^
   drivers/greybus/manifest.c:508:2: note: Loop condition is false. Execution 
continues on line 513
           list_for_each_entry(descriptor, &intf->manifest_descs, links) {
           ^
   include/linux/list.h:638:2: note: expanded from macro 'list_for_each_entry'
           for (pos = list_first_entry(head, typeof(*pos), member);        \
           ^
   drivers/greybus/manifest.c:513:6: note: 'found' is equal to 1
           if (found != 1) {
               ^~~~~
   drivers/greybus/manifest.c:513:2: note: Taking false branch
           if (found != 1) {

vim +/dev +235 drivers/pci/vgaarb.c

deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  231 
 
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  232 
 static struct vga_device *__vga_tryget(struct vga_device *vgadev,
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  233 
                                       unsigned int rsrc)
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  234 
 {
a75d68f62106fe6 drivers/gpu/vga/vgaarb.c Bjorn Helgaas          2016-11-17 @235 
        struct device *dev = &vgadev->pdev->dev;
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  236 
        unsigned int wants, legacy_wants, match;
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  237 
        struct vga_device *conflict;
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  238 
        unsigned int pci_bits;
3448a19da479b6b drivers/gpu/vga/vgaarb.c Dave Airlie            2010-06-01  239 
        u32 flags = 0;
3448a19da479b6b drivers/gpu/vga/vgaarb.c Dave Airlie            2010-06-01  240 
 
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  241 
        /* Account for "normal" resources to lock. If we decode the legacy,
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  242 
         * counterpart, we need to request it as well
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  243 
         */
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  244 
        if ((rsrc & VGA_RSRC_NORMAL_IO) &&
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  245 
            (vgadev->decodes & VGA_RSRC_LEGACY_IO))
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  246 
                rsrc |= VGA_RSRC_LEGACY_IO;
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  247 
        if ((rsrc & VGA_RSRC_NORMAL_MEM) &&
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  248 
            (vgadev->decodes & VGA_RSRC_LEGACY_MEM))
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  249 
                rsrc |= VGA_RSRC_LEGACY_MEM;
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  250 
 
a75d68f62106fe6 drivers/gpu/vga/vgaarb.c Bjorn Helgaas          2016-11-17  251 
        vgaarb_dbg(dev, "%s: %d\n", __func__, rsrc);
a75d68f62106fe6 drivers/gpu/vga/vgaarb.c Bjorn Helgaas          2016-11-17  252 
        vgaarb_dbg(dev, "%s: owns: %d\n", __func__, vgadev->owns);
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  253 
 
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  254 
        /* Check what resources we need to acquire */
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  255 
        wants = rsrc & ~vgadev->owns;
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  256 
 
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  257 
        /* We already own everything, just mark locked & bye bye */
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  258 
        if (wants == 0)
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  259 
                goto lock_them;
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  260 
 
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  261 
        /* We don't need to request a legacy resource, we just enable
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  262 
         * appropriate decoding and go
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  263 
         */
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  264 
        legacy_wants = wants & VGA_RSRC_LEGACY_MASK;
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  265 
        if (legacy_wants == 0)
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  266 
                goto enable_them;
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  267 
 
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  268 
        /* Ok, we don't, let's find out how we need to kick off */
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  269 
        list_for_each_entry(conflict, &vga_list, list) {
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  270 
                unsigned int lwants = legacy_wants;
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  271 
                unsigned int change_bridge = 0;
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  272 
 
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  273 
                /* Don't conflict with myself */
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  274 
                if (vgadev == conflict)
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  275 
                        continue;
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  276 
 
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  277 
                /* We have a possible conflict. before we go further, we must
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  278 
                 * check if we sit on the same bus as the conflicting device.
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  279 
                 * if we don't, then we must tie both IO and MEM resources
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  280 
                 * together since there is only a single bit controlling
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  281 
                 * VGA forwarding on P2P bridges
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  282 
                 */
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  283 
                if (vgadev->pdev->bus != conflict->pdev->bus) {
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  284 
                        change_bridge = 1;
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  285 
                        lwants = VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM;
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  286 
                }
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  287 
 
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  288 
                /* Check if the guy has a lock on the resource. If he does,
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  289 
                 * return the conflicting entry
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  290 
                 */
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  291 
                if (conflict->locks & lwants)
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  292 
                        return conflict;
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  293 
 
4e4e7dc55af5aa6 drivers/gpu/vga/vgaarb.c Alex Williamson        2014-07-03  294 
                /* Ok, now check if it owns the resource we want.  We can
4e4e7dc55af5aa6 drivers/gpu/vga/vgaarb.c Alex Williamson        2014-07-03  295 
                 * lock resources that are not decoded, therefore a device
4e4e7dc55af5aa6 drivers/gpu/vga/vgaarb.c Alex Williamson        2014-07-03  296 
                 * can own resources it doesn't decode.
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  297 
                 */
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  298 
                match = lwants & conflict->owns;
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  299 
                if (!match)
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  300 
                        continue;
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  301 
 
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  302 
                /* looks like he doesn't have a lock, we can steal
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  303 
                 * them from him
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  304 
                 */
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  305 
 
3448a19da479b6b drivers/gpu/vga/vgaarb.c Dave Airlie            2010-06-01  306 
                flags = 0;
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  307 
                pci_bits = 0;
3448a19da479b6b drivers/gpu/vga/vgaarb.c Dave Airlie            2010-06-01  308 
 
4e4e7dc55af5aa6 drivers/gpu/vga/vgaarb.c Alex Williamson        2014-07-03  309 
                /* If we can't control legacy resources via the bridge, we
4e4e7dc55af5aa6 drivers/gpu/vga/vgaarb.c Alex Williamson        2014-07-03  310 
                 * also need to disable normal decoding.
4e4e7dc55af5aa6 drivers/gpu/vga/vgaarb.c Alex Williamson        2014-07-03  311 
                 */
3448a19da479b6b drivers/gpu/vga/vgaarb.c Dave Airlie            2010-06-01  312 
                if (!conflict->bridge_has_one_vga) {
4e4e7dc55af5aa6 drivers/gpu/vga/vgaarb.c Alex Williamson        2014-07-03  313 
                        if ((match & conflict->decodes) & VGA_RSRC_LEGACY_MEM)
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  314 
                                pci_bits |= PCI_COMMAND_MEMORY;
4e4e7dc55af5aa6 drivers/gpu/vga/vgaarb.c Alex Williamson        2014-07-03  315 
                        if ((match & conflict->decodes) & VGA_RSRC_LEGACY_IO)
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  316 
                                pci_bits |= PCI_COMMAND_IO;
4e4e7dc55af5aa6 drivers/gpu/vga/vgaarb.c Alex Williamson        2014-07-03  317 
 
f6b1772b255504e drivers/gpu/vga/vgaarb.c Christoph Hellwig      2021-07-16  318 
                        if (pci_bits)
4e4e7dc55af5aa6 drivers/gpu/vga/vgaarb.c Alex Williamson        2014-07-03  319 
                                flags |= PCI_VGA_STATE_CHANGE_DECODES;
4e4e7dc55af5aa6 drivers/gpu/vga/vgaarb.c Alex Williamson        2014-07-03  320 
                }
3448a19da479b6b drivers/gpu/vga/vgaarb.c Dave Airlie            2010-06-01  321 
 
3448a19da479b6b drivers/gpu/vga/vgaarb.c Dave Airlie            2010-06-01  322 
                if (change_bridge)
3448a19da479b6b drivers/gpu/vga/vgaarb.c Dave Airlie            2010-06-01  323 
                        flags |= PCI_VGA_STATE_CHANGE_BRIDGE;
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  324 
 
3448a19da479b6b drivers/gpu/vga/vgaarb.c Dave Airlie            2010-06-01  325 
                pci_set_vga_state(conflict->pdev, false, pci_bits, flags);
f22d776f3e280e6 drivers/gpu/vga/vgaarb.c Alex Williamson        2013-08-15  326 
                conflict->owns &= ~match;
4e4e7dc55af5aa6 drivers/gpu/vga/vgaarb.c Alex Williamson        2014-07-03  327 
 
4e4e7dc55af5aa6 drivers/gpu/vga/vgaarb.c Alex Williamson        2014-07-03  328 
                /* If we disabled normal decoding, reflect it in owns */
4e4e7dc55af5aa6 drivers/gpu/vga/vgaarb.c Alex Williamson        2014-07-03  329 
                if (pci_bits & PCI_COMMAND_MEMORY)
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  330 
                        conflict->owns &= ~VGA_RSRC_NORMAL_MEM;
4e4e7dc55af5aa6 drivers/gpu/vga/vgaarb.c Alex Williamson        2014-07-03  331 
                if (pci_bits & PCI_COMMAND_IO)
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  332 
                        conflict->owns &= ~VGA_RSRC_NORMAL_IO;
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  333 
        }
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  334 
 
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  335 
 enable_them:
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  336 
        /* ok dude, we got it, everybody conflicting has been disabled, let's
4e4e7dc55af5aa6 drivers/gpu/vga/vgaarb.c Alex Williamson        2014-07-03  337 
         * enable us.  Mark any bits in "owns" regardless of whether we
4e4e7dc55af5aa6 drivers/gpu/vga/vgaarb.c Alex Williamson        2014-07-03  338 
         * decoded them.  We can lock resources we don't decode, therefore
4e4e7dc55af5aa6 drivers/gpu/vga/vgaarb.c Alex Williamson        2014-07-03  339 
         * we must track them via "owns".
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  340 
         */
3448a19da479b6b drivers/gpu/vga/vgaarb.c Dave Airlie            2010-06-01  341 
        flags = 0;
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  342 
        pci_bits = 0;
3448a19da479b6b drivers/gpu/vga/vgaarb.c Dave Airlie            2010-06-01  343 
 
3448a19da479b6b drivers/gpu/vga/vgaarb.c Dave Airlie            2010-06-01  344 
        if (!vgadev->bridge_has_one_vga) {
3448a19da479b6b drivers/gpu/vga/vgaarb.c Dave Airlie            2010-06-01  345 
                flags |= PCI_VGA_STATE_CHANGE_DECODES;
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  346 
                if (wants & (VGA_RSRC_LEGACY_MEM|VGA_RSRC_NORMAL_MEM))
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  347 
                        pci_bits |= PCI_COMMAND_MEMORY;
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  348 
                if (wants & (VGA_RSRC_LEGACY_IO|VGA_RSRC_NORMAL_IO))
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  349 
                        pci_bits |= PCI_COMMAND_IO;
3448a19da479b6b drivers/gpu/vga/vgaarb.c Dave Airlie            2010-06-01  350 
        }
4e4e7dc55af5aa6 drivers/gpu/vga/vgaarb.c Alex Williamson        2014-07-03  351 
        if (wants & VGA_RSRC_LEGACY_MASK)
3448a19da479b6b drivers/gpu/vga/vgaarb.c Dave Airlie            2010-06-01  352 
                flags |= PCI_VGA_STATE_CHANGE_BRIDGE;
3448a19da479b6b drivers/gpu/vga/vgaarb.c Dave Airlie            2010-06-01  353 
 
3448a19da479b6b drivers/gpu/vga/vgaarb.c Dave Airlie            2010-06-01  354 
        pci_set_vga_state(vgadev->pdev, true, pci_bits, flags);
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  355 
 
4e4e7dc55af5aa6 drivers/gpu/vga/vgaarb.c Alex Williamson        2014-07-03  356 
        vgadev->owns |= wants;
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  357 
 lock_them:
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  358 
        vgadev->locks |= (rsrc & VGA_RSRC_LEGACY_MASK);
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  359 
        if (rsrc & VGA_RSRC_LEGACY_IO)
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  360 
                vgadev->io_lock_cnt++;
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  361 
        if (rsrc & VGA_RSRC_LEGACY_MEM)
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  362 
                vgadev->mem_lock_cnt++;
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  363 
        if (rsrc & VGA_RSRC_NORMAL_IO)
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  364 
                vgadev->io_norm_cnt++;
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  365 
        if (rsrc & VGA_RSRC_NORMAL_MEM)
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  366 
                vgadev->mem_norm_cnt++;
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  367 
 
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  368 
        return NULL;
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  369 
 }
deb2d2ecd43dfc5 drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11  370 
 

:::::: The code at line 235 was first introduced by commit
:::::: a75d68f62106fe66c4b8b96c0ee7155bdafc6f06 vgaarb: Use dev_printk() when 
possible

:::::: TO: Bjorn Helgaas <[email protected]>
:::::: CC: Daniel Vetter <[email protected]>

---
0-DAY CI Kernel Test Service
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