CC: [email protected] CC: [email protected] BCC: [email protected] In-Reply-To: <[email protected]> References: <[email protected]> TO: Lizhi Hou <[email protected]> TO: [email protected] TO: [email protected] TO: [email protected] CC: Lizhi Hou <[email protected]> CC: [email protected] CC: [email protected] CC: [email protected] CC: [email protected] CC: [email protected] CC: [email protected] CC: [email protected] CC: [email protected] CC: [email protected] CC: [email protected] CC: Max Zhen <[email protected]>
Hi Lizhi, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on robh/for-next] [also build test WARNING on helgaas-pci/next linus/master pinchartl-media/drm/du/next v5.17-rc7 next-20220308] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Lizhi-Hou/Infrastructure-to-define-apertures-in-a-PCIe-device-with-a-flattened-device-tree/20220307-141939 base: https://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git for-next :::::: branch date: 2 days ago :::::: commit date: 2 days ago config: x86_64-randconfig-c007-20220307 (https://download.01.org/0day-ci/archive/20220309/[email protected]/config) compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project d271fc04d5b97b12e6b797c6067d3c96a8d7470e) 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://github.com/0day-ci/linux/commit/3a2c08c0f0ef77bf1db2f1677721dd87f46df294 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Lizhi-Hou/Infrastructure-to-define-apertures-in-a-PCIe-device-with-a-flattened-device-tree/20220307-141939 git checkout 3a2c08c0f0ef77bf1db2f1677721dd87f46df294 # 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 >>) include/acpi/acexcep.h:58:41: note: expanded from macro 'ACPI_FAILURE' #define ACPI_FAILURE(a) (a) ^~~ drivers/acpi/acpica/hwsleep.c:75:2: note: Taking false branch if (ACPI_FAILURE(status)) { ^ drivers/acpi/acpica/hwsleep.c:78:20: note: Assuming the condition is false ACPI_DEBUG_PRINT((ACPI_DB_INIT, ^ include/acpi/acoutput.h:115:37: note: expanded from macro 'ACPI_DB_INIT' #define ACPI_DB_INIT ACPI_DEBUG_LEVEL (ACPI_LV_INIT) ^ include/acpi/acoutput.h:107:37: note: expanded from macro 'ACPI_DEBUG_LEVEL' #define ACPI_DEBUG_LEVEL(dl) (u32) dl,ACPI_DEBUG_PARAMETERS ^ include/acpi/acoutput.h:313:59: note: expanded from macro 'ACPI_DEBUG_PRINT' #define ACPI_DEBUG_PRINT(plist) ACPI_ACTUAL_DEBUG plist ~~~~~~~~~~~~~~~~~~^~~~~ note: (skipping 1 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all) include/acpi/acoutput.h:299:30: note: expanded from macro 'ACPI_DO_DEBUG_PRINT' if (ACPI_IS_DEBUG_ENABLED (level, component)) \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~ include/acpi/acoutput.h:263:4: note: expanded from macro 'ACPI_IS_DEBUG_ENABLED' ((level & acpi_dbg_level) && (component & acpi_dbg_layer)) ^ include/acpi/acoutput.h:281:44: note: expanded from macro 'ACPI_DO_WHILE0' #define ACPI_DO_WHILE0(a) do a while(0) ^ drivers/acpi/acpica/hwsleep.c:78:2: note: Left side of '&&' is false ACPI_DEBUG_PRINT((ACPI_DB_INIT, ^ include/acpi/acoutput.h:313:41: note: expanded from macro 'ACPI_DEBUG_PRINT' #define ACPI_DEBUG_PRINT(plist) ACPI_ACTUAL_DEBUG plist ^ include/acpi/acoutput.h:306:2: note: expanded from macro 'ACPI_ACTUAL_DEBUG' ACPI_DO_DEBUG_PRINT (acpi_debug_print, level, line, \ ^ include/acpi/acoutput.h:299:7: note: expanded from macro 'ACPI_DO_DEBUG_PRINT' if (ACPI_IS_DEBUG_ENABLED (level, component)) \ ^ include/acpi/acoutput.h:263:28: note: expanded from macro 'ACPI_IS_DEBUG_ENABLED' ((level & acpi_dbg_level) && (component & acpi_dbg_layer)) ^ drivers/acpi/acpica/hwsleep.c:78:2: note: Loop condition is false. Exiting loop ACPI_DEBUG_PRINT((ACPI_DB_INIT, ^ include/acpi/acoutput.h:313:41: note: expanded from macro 'ACPI_DEBUG_PRINT' #define ACPI_DEBUG_PRINT(plist) ACPI_ACTUAL_DEBUG plist ^ include/acpi/acoutput.h:306:2: note: expanded from macro 'ACPI_ACTUAL_DEBUG' ACPI_DO_DEBUG_PRINT (acpi_debug_print, level, line, \ ^ include/acpi/acoutput.h:298:2: note: expanded from macro 'ACPI_DO_DEBUG_PRINT' ACPI_DO_WHILE0 ({ \ ^ include/acpi/acoutput.h:281:41: note: expanded from macro 'ACPI_DO_WHILE0' #define ACPI_DO_WHILE0(a) do a while(0) ^ drivers/acpi/acpica/hwsleep.c:102:6: note: Assuming 'status' is 0 if (ACPI_FAILURE(status)) { ^ include/acpi/acexcep.h:58:41: note: expanded from macro 'ACPI_FAILURE' #define ACPI_FAILURE(a) (a) ^~~ drivers/acpi/acpica/hwsleep.c:102:2: note: Taking false branch if (ACPI_FAILURE(status)) { ^ drivers/acpi/acpica/hwsleep.c:113:6: note: Assuming 'sleep_state' is < ACPI_STATE_S4 if (sleep_state < ACPI_STATE_S4) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/acpi/acpica/hwsleep.c:113:2: note: Taking true branch if (sleep_state < ACPI_STATE_S4) { ^ drivers/acpi/acpica/hwsleep.c:114:3: note: Calling 'wbinvd' ACPI_FLUSH_CPU_CACHE(); ^ arch/x86/include/asm/acenv.h:16:32: note: expanded from macro 'ACPI_FLUSH_CPU_CACHE' #define ACPI_FLUSH_CPU_CACHE() wbinvd() ^~~~~~~~ arch/x86/include/asm/paravirt.h:183:2: note: Assigned value is garbage or undefined PVOP_ALT_VCALL0(cpu.wbinvd, "wbinvd", ALT_NOT(X86_FEATURE_XENPV)); ^ arch/x86/include/asm/paravirt_types.h:516:2: note: expanded from macro 'PVOP_ALT_VCALL0' __PVOP_ALT_VCALL(op, alt, cond) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ arch/x86/include/asm/paravirt_types.h:496:8: note: expanded from macro '__PVOP_ALT_VCALL' (void)____PVOP_ALT_CALL(, op, alt, cond, CLBR_ANY, \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ arch/x86/include/asm/paravirt_types.h:461:3: note: expanded from macro '____PVOP_ALT_CALL' PVOP_CALL_ARGS; \ ^~~~~~~~~~~~~~ arch/x86/include/asm/paravirt_types.h:405:16: note: expanded from macro 'PVOP_CALL_ARGS' unsigned long __edi = __edi, __esi = __esi, \ ^ ~~~~~ 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. 6 warnings generated. >> drivers/pci/of.c:762:2: warning: Argument to kfree() is the address of a >> global variable, which is not memory allocated by malloc() >> [clang-analyzer-unix.Malloc] kfree(prop); ^ ~~~~ drivers/pci/of.c:689:7: note: 'node' is non-null if (!node) ^~~~ drivers/pci/of.c:689:2: note: Taking false branch if (!node) ^ drivers/pci/of.c:695:6: note: 'ret' is -12 if (ret) ^~~ drivers/pci/of.c:695:2: note: Taking true branch if (ret) ^ drivers/pci/of.c:696:3: note: Control jumps to line 762 goto cleanup; ^ drivers/pci/of.c:762:2: note: Argument to kfree() is the address of a global variable, which is not memory allocated by malloc() kfree(prop); ^ ~~~~ 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. 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. 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. 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. include/linux/fsnotify_backend.h:279:18: warning: Access to field 'dentry' results in a dereference of a null pointer (loaded from variable 'data') [clang-analyzer-core.NullDereference] return d_inode(((const struct path *)data)->dentry); ^ fs/notify/fsnotify.c:184:22: note: Assuming 'path' is null struct mount *mnt = path ? real_mount(path->mnt) : NULL; ^~~~ fs/notify/fsnotify.c:184:22: note: '?' condition is false fs/notify/fsnotify.c:199:6: note: Assuming field 'i_fsnotify_marks' is non-null if (!inode->i_fsnotify_marks && !inode->i_sb->s_fsnotify_marks && ^~~~~~~~~~~~~~~~~~~~~~~~ fs/notify/fsnotify.c:199:31: note: Left side of '&&' is false if (!inode->i_fsnotify_marks && !inode->i_sb->s_fsnotify_marks && ^ fs/notify/fsnotify.c:204:18: note: Calling 'fsnotify_event_needs_parent' parent_needed = fsnotify_event_needs_parent(inode, mnt, mask); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fs/notify/fsnotify.c:152:6: note: Assuming the condition is true if (mask & FS_ISDIR) ^~~~~~~~~~~~~~~ fs/notify/fsnotify.c:152:2: note: Taking true branch if (mask & FS_ISDIR) ^ fs/notify/fsnotify.c:153:3: note: Returning zero, which participates in a condition later return false; ^~~~~~~~~~~~ fs/notify/fsnotify.c:204:18: note: Returning from 'fsnotify_event_needs_parent' parent_needed = fsnotify_event_needs_parent(inode, mnt, mask); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fs/notify/fsnotify.c:205:6: note: Assuming 'parent_watched' is true if (!parent_watched && !parent_needed) ^~~~~~~~~~~~~~~ fs/notify/fsnotify.c:205:22: note: Left side of '&&' is false if (!parent_watched && !parent_needed) ^ fs/notify/fsnotify.c:212:15: note: 'parent_watched' is true if (unlikely(parent_watched && !p_mask)) ^ include/linux/compiler.h:78:42: note: expanded from macro 'unlikely' # define unlikely(x) __builtin_expect(!!(x), 0) ^ fs/notify/fsnotify.c:212:15: note: Left side of '&&' is true if (unlikely(parent_watched && !p_mask)) ^ fs/notify/fsnotify.c:212:33: note: Assuming 'p_mask' is not equal to 0 if (unlikely(parent_watched && !p_mask)) ^ include/linux/compiler.h:78:42: note: expanded from macro 'unlikely' # define unlikely(x) __builtin_expect(!!(x), 0) ^ fs/notify/fsnotify.c:212:2: note: Taking false branch if (unlikely(parent_watched && !p_mask)) ^ fs/notify/fsnotify.c:220:6: note: 'parent_needed' is false if (parent_needed || parent_interested) { ^~~~~~~~~~~~~ fs/notify/fsnotify.c:220:6: note: Left side of '||' is false fs/notify/fsnotify.c:220:23: note: Assuming 'parent_interested' is true if (parent_needed || parent_interested) { ^~~~~~~~~~~~~~~~~ fs/notify/fsnotify.c:220:2: note: Taking true branch if (parent_needed || parent_interested) { ^ fs/notify/fsnotify.c:222:45: note: Passing null pointer value via 1st parameter 'data' WARN_ON_ONCE(inode != fsnotify_data_inode(data, data_type)); ^ include/asm-generic/bug.h:104:25: note: expanded from macro 'WARN_ON_ONCE' int __ret_warn_on = !!(condition); \ ^~~~~~~~~ vim +762 drivers/pci/of.c 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 663 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 664 /** 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 665 * devm_of_pci_create_bus_endpoint - Create a device node for the given pci device. 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 666 * @pdev: PCI device pointer. 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 667 * 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 668 * For PCI device which uses flattened device tree to describe apertures in its BARs, 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 669 * a device node for the given pci device is required. Then the flattened device tree 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 670 * overlay from the device can be applied to the base tree. 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 671 * The device node is under root node and act like bus node. It contains a "ranges" 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 672 * property which is used for address translation of its children. Each child node 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 673 * corresponds an aperture and use BAR index and offset as its address. 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 674 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 675 * Returns 0 on success or a negative error-code on failure. 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 676 */ 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 677 int devm_of_pci_create_bus_endpoint(struct pci_dev *pdev) 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 678 { 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 679 struct property *proplist = NULL; 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 680 struct device *dev = &pdev->dev; 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 681 int range_ncells, addr_ncells; 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 682 struct device_node *node; 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 683 void *prop = NULL; 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 684 u32 *range_cell; 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 685 __be32 val; 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 686 int i, ret; 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 687 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 688 node = of_ep_alloc_node(pdev, "pci-ep-bus"); 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 689 if (!node) 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 690 return -ENOMEM; 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 691 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 692 /* the endpoint node works as 'simple-bus' to translate aperture addresses. */ 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 693 prop = "simple-bus"; 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 694 ret = of_ep_add_property(dev, &proplist, "compatible", strlen(prop) + 1, prop); 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 695 if (ret) 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 696 goto cleanup; 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 697 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 698 /* The address and size cells of nodes underneath are 2 */ 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 699 val = cpu_to_be32(2); 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 700 ret = of_ep_add_property(dev, &proplist, "#address-cells", sizeof(u32), &val); 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 701 if (ret) 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 702 goto cleanup; 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 703 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 704 ret = of_ep_add_property(dev, &proplist, "#size-cells", sizeof(u32), &val); 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 705 if (ret) 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 706 goto cleanup; 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 707 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 708 /* child address format: 0xIooooooo oooooooo, I = bar index, o = offset on bar */ 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 709 addr_ncells = of_n_addr_cells(node); 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 710 if (addr_ncells > 2) { 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 711 /* does not support number of address cells greater than 2 */ 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 712 ret = -EINVAL; 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 713 goto cleanup; 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 714 } 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 715 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 716 /* range cells include <node addr cells> <child addr cells> <child size cells> */ 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 717 range_ncells = addr_ncells + 4; 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 718 prop = kzalloc(range_ncells * sizeof(u32) * PCI_STD_NUM_BARS, GFP_KERNEL); 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 719 if (!prop) { 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 720 ret = -ENOMEM; 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 721 goto cleanup; 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 722 } 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 723 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 724 range_cell = prop; 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 725 for (i = 0; i < PCI_STD_NUM_BARS; i++) { 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 726 if (!pci_resource_len(pdev, i)) 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 727 continue; 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 728 /* highest 4 bits of address are bar index */ 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 729 *(__be64 *)range_cell = cpu_to_be64((u64)i << 60); 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 730 range_cell += 2; 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 731 if (addr_ncells == 2) 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 732 *(__be64 *)range_cell = cpu_to_be64((u64)pci_resource_start(pdev, i)); 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 733 else 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 734 *(__be32 *)range_cell = cpu_to_be32((u32)pci_resource_start(pdev, i)); 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 735 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 736 range_cell += addr_ncells; 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 737 *(__be64 *)range_cell = cpu_to_be64((u64)pci_resource_len(pdev, i)); 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 738 range_cell += 2; 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 739 } 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 740 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 741 /* error out if there is not PCI BAR been found */ 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 742 if ((void *)range_cell == prop) { 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 743 ret = -EINVAL; 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 744 goto cleanup; 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 745 } 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 746 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 747 ret = of_ep_add_property(dev, &proplist, "ranges", (void *)range_cell - prop, prop); 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 748 kfree(prop); 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 749 if (ret) 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 750 goto cleanup; 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 751 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 752 node->properties = proplist; 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 753 ret = of_attach_node(node); 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 754 if (ret) 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 755 goto cleanup; 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 756 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 757 devres_add(dev, node); 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 758 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 759 return 0; 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 760 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 761 cleanup: 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 @762 kfree(prop); 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 763 if (node) 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 764 devres_free(node); 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 765 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 766 return ret; 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 767 } 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 768 EXPORT_SYMBOL_GPL(devm_of_pci_create_bus_endpoint); 3a2c08c0f0ef77b Lizhi Hou 2022-03-04 769 --- 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]
