CC: [email protected] TO: Bjorn Helgaas <[email protected]> tree: https://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci.git review/vga head: d3ff98e99536cd76e77696889600ee06fe5253b2 commit: e7d0ca67cfb1c61feb5fed7632cedb69e7ccdd79 [1/9] PCI/VGA: Move vgaarb to drivers/pci :::::: branch date: 2 days ago :::::: commit date: 2 days ago config: x86_64-randconfig-c001-20210723 (attached as .config) compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project 9625ca5b602616b2f5584e8a49ba93c52c141e40) 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 # install x86_64 cross compiling tool for clang build # apt-get install binutils-x86-64-linux-gnu # https://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci.git/commit/?id=e7d0ca67cfb1c61feb5fed7632cedb69e7ccdd79 git remote add pci https://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci.git git fetch --no-tags pci review/vga git checkout e7d0ca67cfb1c61feb5fed7632cedb69e7ccdd79 # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross clang-analyzer ARCH=x86_64
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 >>) ^~~~~~ drivers/acpi/acpica/rscreate.c:327:5: note: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 strcpy(user_prt->source, ^~~~~~ Suppressed 2 warnings (2 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. 2 warnings generated. Suppressed 2 warnings (2 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. 2 warnings generated. Suppressed 2 warnings (2 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. 31 warnings generated. Suppressed 31 warnings (2 in non-user code, 29 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 3 warnings generated. Suppressed 3 warnings (3 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. 3 warnings generated. Suppressed 3 warnings (3 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. 5 warnings generated. 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. 3 warnings generated. fs/kernfs/symlink.c:77:3: warning: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy] strcpy(s, "../"); ^~~~~~ fs/kernfs/symlink.c:77:3: note: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 strcpy(s, "../"); ^~~~~~ Suppressed 2 warnings (2 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. fs/sysfs/file.c:54:2: warning: Null pointer passed as 1st argument to memory set function [clang-analyzer-unix.cstring.NullArg] memset(buf, 0, PAGE_SIZE); ^ ~~~ fs/sysfs/file.c:49:10: note: Calling 'seq_get_buf' count = seq_get_buf(sf, &buf); ^~~~~~~~~~~~~~~~~~~~~ include/linux/seq_file.h:65:9: note: Assuming field 'count' is <= field 'size' BUG_ON(m->count > m->size); ^ include/asm-generic/bug.h:65:45: note: expanded from macro 'BUG_ON' #define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while (0) ^~~~~~~~~ include/linux/compiler.h:78:42: note: expanded from macro 'unlikely' # define unlikely(x) __builtin_expect(!!(x), 0) ^ include/linux/seq_file.h:65:2: note: Taking false branch BUG_ON(m->count > m->size); ^ include/asm-generic/bug.h:65:32: note: expanded from macro 'BUG_ON' #define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while (0) ^ include/linux/seq_file.h:65:2: note: Loop condition is false. Exiting loop BUG_ON(m->count > m->size); ^ include/asm-generic/bug.h:65:27: note: expanded from macro 'BUG_ON' #define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while (0) ^ include/linux/seq_file.h:66:6: note: Assuming field 'count' is >= field 'size' if (m->count < m->size) ^~~~~~~~~~~~~~~~~~ include/linux/seq_file.h:66:2: note: Taking false branch if (m->count < m->size) ^ include/linux/seq_file.h:69:3: note: Null pointer value stored to 'buf' *bufp = NULL; ^~~~~~~~~~~~ fs/sysfs/file.c:49:10: note: Returning from 'seq_get_buf' count = seq_get_buf(sf, &buf); ^~~~~~~~~~~~~~~~~~~~~ fs/sysfs/file.c:50:6: note: Assuming the condition is false if (count < PAGE_SIZE) { ^~~~~~~~~~~~~~~~~ fs/sysfs/file.c:50:2: note: Taking false branch if (count < PAGE_SIZE) { ^ fs/sysfs/file.c:54:2: note: Null pointer passed as 1st argument to memory set function memset(buf, 0, PAGE_SIZE); ^ ~~~ Suppressed 3 warnings (3 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. 3 warnings generated. Suppressed 3 warnings (3 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. 3 warnings generated. Suppressed 3 warnings (3 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. 3 warnings generated. Suppressed 3 warnings (3 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. 5 warnings generated. >> drivers/pci/vgaarb.c:245: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:245:17: note: Value stored to 'dev' during its initialization is never read struct device *dev = &vgadev->pdev->dev; ^~~ ~~~~~~~~~~~~~~~~~~ drivers/pci/vgaarb.c:394: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:394:17: note: Value stored to 'dev' during its initialization is never read struct device *dev = &vgadev->pdev->dev; ^~~ ~~~~~~~~~~~~~~~~~~ Suppressed 3 warnings (3 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. 3 warnings generated. Suppressed 3 warnings (3 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/switch/switchtec.c:118:16: warning: Use of memory after it is freed [clang-analyzer-unix.Malloc] stuser->state = state; ^ drivers/pci/switch/switchtec.c:239:10: note: Left side of '&&' is false stdev = container_of(work, struct switchtec_dev, mrpc_work); ^ include/linux/kernel.h:495:61: note: expanded from macro 'container_of' BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \ ^ drivers/pci/switch/switchtec.c:239:10: note: Taking false branch stdev = container_of(work, struct switchtec_dev, mrpc_work); ^ include/linux/kernel.h:495:2: note: expanded from macro 'container_of' BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \ ^ include/linux/build_bug.h:39:37: note: expanded from macro 'BUILD_BUG_ON_MSG' #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg) ^ include/linux/compiler_types.h:328:2: note: expanded from macro 'compiletime_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) ^ include/linux/compiler_types.h:316:2: note: expanded from macro '_compiletime_assert' __compiletime_assert(condition, msg, prefix, suffix) ^ include/linux/compiler_types.h:308:3: note: expanded from macro '__compiletime_assert' if (!(condition)) \ ^ drivers/pci/switch/switchtec.c:239:10: note: Loop condition is false. Exiting loop stdev = container_of(work, struct switchtec_dev, mrpc_work); ^ include/linux/kernel.h:495:2: note: expanded from macro 'container_of' BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \ ^ include/linux/build_bug.h:39:37: note: expanded from macro 'BUILD_BUG_ON_MSG' #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg) ^ include/linux/compiler_types.h:328:2: note: expanded from macro 'compiletime_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) ^ include/linux/compiler_types.h:316:2: note: expanded from macro '_compiletime_assert' __compiletime_assert(condition, msg, prefix, suffix) ^ include/linux/compiler_types.h:306:2: note: expanded from macro '__compiletime_assert' do { \ ^ drivers/pci/switch/switchtec.c:241:2: note: Taking false branch dev_dbg(&stdev->dev, "%s\n", __func__); ^ include/linux/dev_printk.h:130:2: note: expanded from macro 'dev_dbg' if (0) \ ^ drivers/pci/switch/switchtec.c:245:2: note: Calling 'mrpc_complete_cmd' mrpc_complete_cmd(stdev); ^~~~~~~~~~~~~~~~~~~~~~~~ drivers/pci/switch/switchtec.c:192:6: note: Assuming the condition is false if (list_empty(&stdev->mrpc_queue)) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/pci/switch/switchtec.c:192:2: note: Taking false branch if (list_empty(&stdev->mrpc_queue)) ^ drivers/pci/switch/switchtec.c:195:11: note: Left side of '&&' is false stuser = list_entry(stdev->mrpc_queue.next, struct switchtec_user, ^ include/linux/list.h:511:2: note: expanded from macro 'list_entry' container_of(ptr, type, member) ^ include/linux/kernel.h:495:61: note: expanded from macro 'container_of' BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \ ^ drivers/pci/switch/switchtec.c:195:11: note: Taking false branch stuser = list_entry(stdev->mrpc_queue.next, struct switchtec_user, ^ include/linux/list.h:511:2: note: expanded from macro 'list_entry' container_of(ptr, type, member) ^ include/linux/kernel.h:495:2: note: expanded from macro 'container_of' BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \ ^ include/linux/build_bug.h:39:37: note: expanded from macro 'BUILD_BUG_ON_MSG' #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg) ^ include/linux/compiler_types.h:328:2: note: expanded from macro 'compiletime_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) vim +/dev +245 drivers/pci/vgaarb.c deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 241 deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 242 static struct vga_device *__vga_tryget(struct vga_device *vgadev, deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 243 unsigned int rsrc) deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 244 { a75d68f62106fe drivers/gpu/vga/vgaarb.c Bjorn Helgaas 2016-11-17 @245 struct device *dev = &vgadev->pdev->dev; deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 246 unsigned int wants, legacy_wants, match; deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 247 struct vga_device *conflict; deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 248 unsigned int pci_bits; 3448a19da479b6 drivers/gpu/vga/vgaarb.c Dave Airlie 2010-06-01 249 u32 flags = 0; 3448a19da479b6 drivers/gpu/vga/vgaarb.c Dave Airlie 2010-06-01 250 deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 251 /* Account for "normal" resources to lock. If we decode the legacy, deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 252 * counterpart, we need to request it as well deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 253 */ deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 254 if ((rsrc & VGA_RSRC_NORMAL_IO) && deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 255 (vgadev->decodes & VGA_RSRC_LEGACY_IO)) deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 256 rsrc |= VGA_RSRC_LEGACY_IO; deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 257 if ((rsrc & VGA_RSRC_NORMAL_MEM) && deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 258 (vgadev->decodes & VGA_RSRC_LEGACY_MEM)) deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 259 rsrc |= VGA_RSRC_LEGACY_MEM; deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 260 a75d68f62106fe drivers/gpu/vga/vgaarb.c Bjorn Helgaas 2016-11-17 261 vgaarb_dbg(dev, "%s: %d\n", __func__, rsrc); a75d68f62106fe drivers/gpu/vga/vgaarb.c Bjorn Helgaas 2016-11-17 262 vgaarb_dbg(dev, "%s: owns: %d\n", __func__, vgadev->owns); deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 263 deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 264 /* Check what resources we need to acquire */ deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 265 wants = rsrc & ~vgadev->owns; deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 266 deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 267 /* We already own everything, just mark locked & bye bye */ deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 268 if (wants == 0) deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 269 goto lock_them; deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 270 deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 271 /* We don't need to request a legacy resource, we just enable deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 272 * appropriate decoding and go deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 273 */ deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 274 legacy_wants = wants & VGA_RSRC_LEGACY_MASK; deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 275 if (legacy_wants == 0) deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 276 goto enable_them; deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 277 deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 278 /* Ok, we don't, let's find out how we need to kick off */ deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 279 list_for_each_entry(conflict, &vga_list, list) { deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 280 unsigned int lwants = legacy_wants; deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 281 unsigned int change_bridge = 0; deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 282 deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 283 /* Don't conflict with myself */ deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 284 if (vgadev == conflict) deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 285 continue; deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 286 deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 287 /* Check if the architecture allows a conflict between those deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 288 * 2 devices or if they are on separate domains deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 289 */ deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 290 if (!vga_conflicts(vgadev->pdev, conflict->pdev)) deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 291 continue; deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 292 deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 293 /* We have a possible conflict. before we go further, we must deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 294 * check if we sit on the same bus as the conflicting device. deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 295 * if we don't, then we must tie both IO and MEM resources deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 296 * together since there is only a single bit controlling deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 297 * VGA forwarding on P2P bridges deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 298 */ deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 299 if (vgadev->pdev->bus != conflict->pdev->bus) { deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 300 change_bridge = 1; deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 301 lwants = VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM; deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 302 } deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 303 deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 304 /* Check if the guy has a lock on the resource. If he does, deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 305 * return the conflicting entry deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 306 */ deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 307 if (conflict->locks & lwants) deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 308 return conflict; deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 309 4e4e7dc55af5aa drivers/gpu/vga/vgaarb.c Alex Williamson 2014-07-03 310 /* Ok, now check if it owns the resource we want. We can 4e4e7dc55af5aa drivers/gpu/vga/vgaarb.c Alex Williamson 2014-07-03 311 * lock resources that are not decoded, therefore a device 4e4e7dc55af5aa drivers/gpu/vga/vgaarb.c Alex Williamson 2014-07-03 312 * can own resources it doesn't decode. deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 313 */ deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 314 match = lwants & conflict->owns; deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 315 if (!match) deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 316 continue; deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 317 deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 318 /* looks like he doesn't have a lock, we can steal deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 319 * them from him deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 320 */ deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 321 3448a19da479b6 drivers/gpu/vga/vgaarb.c Dave Airlie 2010-06-01 322 flags = 0; deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 323 pci_bits = 0; 3448a19da479b6 drivers/gpu/vga/vgaarb.c Dave Airlie 2010-06-01 324 4e4e7dc55af5aa drivers/gpu/vga/vgaarb.c Alex Williamson 2014-07-03 325 /* If we can't control legacy resources via the bridge, we 4e4e7dc55af5aa drivers/gpu/vga/vgaarb.c Alex Williamson 2014-07-03 326 * also need to disable normal decoding. 4e4e7dc55af5aa drivers/gpu/vga/vgaarb.c Alex Williamson 2014-07-03 327 */ 3448a19da479b6 drivers/gpu/vga/vgaarb.c Dave Airlie 2010-06-01 328 if (!conflict->bridge_has_one_vga) { 4e4e7dc55af5aa drivers/gpu/vga/vgaarb.c Alex Williamson 2014-07-03 329 if ((match & conflict->decodes) & VGA_RSRC_LEGACY_MEM) deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 330 pci_bits |= PCI_COMMAND_MEMORY; 4e4e7dc55af5aa drivers/gpu/vga/vgaarb.c Alex Williamson 2014-07-03 331 if ((match & conflict->decodes) & VGA_RSRC_LEGACY_IO) deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 332 pci_bits |= PCI_COMMAND_IO; 4e4e7dc55af5aa drivers/gpu/vga/vgaarb.c Alex Williamson 2014-07-03 333 4e4e7dc55af5aa drivers/gpu/vga/vgaarb.c Alex Williamson 2014-07-03 334 if (pci_bits) { 4e4e7dc55af5aa drivers/gpu/vga/vgaarb.c Alex Williamson 2014-07-03 335 vga_irq_set_state(conflict, false); 4e4e7dc55af5aa drivers/gpu/vga/vgaarb.c Alex Williamson 2014-07-03 336 flags |= PCI_VGA_STATE_CHANGE_DECODES; 4e4e7dc55af5aa drivers/gpu/vga/vgaarb.c Alex Williamson 2014-07-03 337 } 3448a19da479b6 drivers/gpu/vga/vgaarb.c Dave Airlie 2010-06-01 338 } 3448a19da479b6 drivers/gpu/vga/vgaarb.c Dave Airlie 2010-06-01 339 3448a19da479b6 drivers/gpu/vga/vgaarb.c Dave Airlie 2010-06-01 340 if (change_bridge) 3448a19da479b6 drivers/gpu/vga/vgaarb.c Dave Airlie 2010-06-01 341 flags |= PCI_VGA_STATE_CHANGE_BRIDGE; deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 342 3448a19da479b6 drivers/gpu/vga/vgaarb.c Dave Airlie 2010-06-01 343 pci_set_vga_state(conflict->pdev, false, pci_bits, flags); f22d776f3e280e drivers/gpu/vga/vgaarb.c Alex Williamson 2013-08-15 344 conflict->owns &= ~match; 4e4e7dc55af5aa drivers/gpu/vga/vgaarb.c Alex Williamson 2014-07-03 345 4e4e7dc55af5aa drivers/gpu/vga/vgaarb.c Alex Williamson 2014-07-03 346 /* If we disabled normal decoding, reflect it in owns */ 4e4e7dc55af5aa drivers/gpu/vga/vgaarb.c Alex Williamson 2014-07-03 347 if (pci_bits & PCI_COMMAND_MEMORY) deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 348 conflict->owns &= ~VGA_RSRC_NORMAL_MEM; 4e4e7dc55af5aa drivers/gpu/vga/vgaarb.c Alex Williamson 2014-07-03 349 if (pci_bits & PCI_COMMAND_IO) deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 350 conflict->owns &= ~VGA_RSRC_NORMAL_IO; deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 351 } deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 352 deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 353 enable_them: deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 354 /* ok dude, we got it, everybody conflicting has been disabled, let's 4e4e7dc55af5aa drivers/gpu/vga/vgaarb.c Alex Williamson 2014-07-03 355 * enable us. Mark any bits in "owns" regardless of whether we 4e4e7dc55af5aa drivers/gpu/vga/vgaarb.c Alex Williamson 2014-07-03 356 * decoded them. We can lock resources we don't decode, therefore 4e4e7dc55af5aa drivers/gpu/vga/vgaarb.c Alex Williamson 2014-07-03 357 * we must track them via "owns". deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 358 */ 3448a19da479b6 drivers/gpu/vga/vgaarb.c Dave Airlie 2010-06-01 359 flags = 0; deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 360 pci_bits = 0; 3448a19da479b6 drivers/gpu/vga/vgaarb.c Dave Airlie 2010-06-01 361 3448a19da479b6 drivers/gpu/vga/vgaarb.c Dave Airlie 2010-06-01 362 if (!vgadev->bridge_has_one_vga) { 3448a19da479b6 drivers/gpu/vga/vgaarb.c Dave Airlie 2010-06-01 363 flags |= PCI_VGA_STATE_CHANGE_DECODES; deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 364 if (wants & (VGA_RSRC_LEGACY_MEM|VGA_RSRC_NORMAL_MEM)) deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 365 pci_bits |= PCI_COMMAND_MEMORY; deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 366 if (wants & (VGA_RSRC_LEGACY_IO|VGA_RSRC_NORMAL_IO)) deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 367 pci_bits |= PCI_COMMAND_IO; 3448a19da479b6 drivers/gpu/vga/vgaarb.c Dave Airlie 2010-06-01 368 } 4e4e7dc55af5aa drivers/gpu/vga/vgaarb.c Alex Williamson 2014-07-03 369 if (wants & VGA_RSRC_LEGACY_MASK) 3448a19da479b6 drivers/gpu/vga/vgaarb.c Dave Airlie 2010-06-01 370 flags |= PCI_VGA_STATE_CHANGE_BRIDGE; 3448a19da479b6 drivers/gpu/vga/vgaarb.c Dave Airlie 2010-06-01 371 3448a19da479b6 drivers/gpu/vga/vgaarb.c Dave Airlie 2010-06-01 372 pci_set_vga_state(vgadev->pdev, true, pci_bits, flags); deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 373 5d90ccf908bd80 drivers/gpu/vga/vgaarb.c Thierry Reding 2015-08-12 374 if (!vgadev->bridge_has_one_vga) deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 375 vga_irq_set_state(vgadev, true); 5d90ccf908bd80 drivers/gpu/vga/vgaarb.c Thierry Reding 2015-08-12 376 4e4e7dc55af5aa drivers/gpu/vga/vgaarb.c Alex Williamson 2014-07-03 377 vgadev->owns |= wants; deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 378 lock_them: deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 379 vgadev->locks |= (rsrc & VGA_RSRC_LEGACY_MASK); deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 380 if (rsrc & VGA_RSRC_LEGACY_IO) deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 381 vgadev->io_lock_cnt++; deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 382 if (rsrc & VGA_RSRC_LEGACY_MEM) deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 383 vgadev->mem_lock_cnt++; deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 384 if (rsrc & VGA_RSRC_NORMAL_IO) deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 385 vgadev->io_norm_cnt++; deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 386 if (rsrc & VGA_RSRC_NORMAL_MEM) deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 387 vgadev->mem_norm_cnt++; deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 388 deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 389 return NULL; deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 390 } deb2d2ecd43dfc drivers/gpu/vga/vgaarb.c Benjamin Herrenschmidt 2009-08-11 391 :::::: The code at line 245 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, Intel Corporation https://lists.01.org/hyperkitty/list/[email protected]
.config.gz
Description: application/gzip
_______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
