tree:
https://chromium.googlesource.com/chromiumos/third_party/kernel chromeos-4.4
head: 6d5e8cb22c2a82dde051b99b44498bbc350c7130
commit: 210799dfa9aea12c2d02acb3bec06676cfabef96 [9/11] CHROMIUM: drm/evdi: Use free
platform device again after its parent was removed
config: xtensa-allyesconfig (attached as .config)
compiler: xtensa-linux-gcc (GCC) 7.5.0
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
git remote add chrome-os
https://chromium.googlesource.com/chromiumos/third_party/kernel
git fetch --no-tags chrome-os chromeos-4.4
git checkout 210799dfa9aea12c2d02acb3bec06676cfabef96
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-7.5.0 make.cross ARCH=xtensa
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
All warnings (new ones prefixed by >>):
cc1: warning: include/drm: No such file or directory [-Wmissing-include-dirs]
In file included from include/uapi/linux/stddef.h:1:0,
from include/linux/stddef.h:4,
from include/uapi/linux/posix_types.h:4,
from include/uapi/linux/types.h:13,
from include/linux/types.h:5,
from include/linux/list.h:4,
from include/linux/agp_backend.h:33,
from include/drm/drmP.h:35,
from drivers/gpu/drm/evdi/evdi_drv.c:10:
include/linux/scatterlist.h: In function 'sg_set_buf':
arch/xtensa/include/asm/page.h:175:9: warning: comparison of unsigned expression >=
0 is always true [-Wtype-limits]
((pfn) >= ARCH_PFN_OFFSET && ((pfn) - ARCH_PFN_OFFSET) < max_mapnr)
^
include/linux/compiler.h:182:42: note: in definition of macro 'unlikely'
# define unlikely(x) __builtin_expect(!!(x), 0)
^
include/linux/scatterlist.h:140:2: note: in expansion of macro 'BUG_ON'
BUG_ON(!virt_addr_valid(buf));
^~~~~~
arch/xtensa/include/asm/page.h:183:32: note: in expansion of macro 'pfn_valid'
#define virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT)
^~~~~~~~~
include/linux/scatterlist.h:140:10: note: in expansion of macro
'virt_addr_valid'
BUG_ON(!virt_addr_valid(buf));
^~~~~~~~~~~~~~~
In file included from drivers/gpu/drm/evdi/evdi_drv.h:23:0,
from drivers/gpu/drm/evdi/evdi_drv.c:17:
include/linux/reservation.h: In function 'reservation_object_fini':
include/linux/reservation.h:122:17: warning: comparison between signed and unsigned
integer expressions [-Wsign-compare]
for (i = 0; i < fobj->shared_count; ++i)
^
drivers/gpu/drm/evdi/evdi_drv.c: At top level:
> drivers/gpu/drm/evdi/evdi_drv.c:72:6: warning: no previous
prototype for 'evdi_platform_device_is_free' [-Wmissing-prototypes]
bool
evdi_platform_device_is_free(struct platform_device *pdev)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/gpu/drm/evdi/evdi_drv.c: In function 'add_device_with_usb_path':
drivers/gpu/drm/evdi/evdi_drv.c:303:8: warning: variable 'itf_token' set but
not used [-Wunused-but-set-variable]
char *itf_token = NULL;
^~~~~~~~~
drivers/gpu/drm/evdi/evdi_drv.c: In function 'evdi_init':
drivers/gpu/drm/evdi/evdi_drv.c:491:17: warning: comparison between signed and unsigned
integer expressions [-Wsign-compare]
for (i = 0; i < ARRAY_SIZE(evdi_device_attributes); i++) {
^
drivers/gpu/drm/evdi/evdi_drv.c: In function 'evdi_exit':
drivers/gpu/drm/evdi/evdi_drv.c:510:17: warning: comparison between signed and unsigned
integer expressions [-Wsign-compare]
for (i = 0; i < ARRAY_SIZE(evdi_device_attributes); i++) {
^
vim +/evdi_platform_device_is_free +72 drivers/gpu/drm/evdi/evdi_drv.c
16
17 #include "evdi_drv.h"
18 #include
<uapi/drm/evdi_drm.h>
19 #include "evdi_debug.h"
20
21 MODULE_AUTHOR("DisplayLink (UK) Ltd.");
22 MODULE_DESCRIPTION("Extensible Virtual Display Interface");
23 MODULE_LICENSE("GPL");
24
25 #define EVDI_DEVICE_COUNT_MAX 16
26 #define MAX_EVDI_USB_ADDR 10
27
28 static struct evdi_context {
29 struct device *root_dev;
30 unsigned int dev_count;
31 struct platform_device *devices[EVDI_DEVICE_COUNT_MAX];
32 struct notifier_block usb_notifier;
33 } evdi_context;
34
35 static int evdi_platform_drv_usb(__always_unused struct notifier_block *nb,
36 unsigned long action,
37 void *data)
38 {
39 struct usb_device *usb_dev = (struct usb_device *)(data);
40 struct platform_device *pdev;
41 int i = 0;
42
43 if (!usb_dev)
44 return 0;
45 if (action != BUS_NOTIFY_DEL_DEVICE)
46 return 0;
47
48 for (i = 0; i < EVDI_DEVICE_COUNT_MAX; ++i) {
49 pdev = evdi_context.devices[i];
50 if (pdev && pdev->dev.parent == &usb_dev->dev) {
51 EVDI_INFO("Parent USB removed. Removing evdi.%d\n", i);
52 platform_device_unregister(pdev);
53 evdi_context.dev_count--;
54 evdi_context.devices[i] = NULL;
55 }
56 }
57
58 return 0;
59 }
60
61 static int evdi_context_get_free_idx(struct evdi_context *ctx)
62 {
63 int i;
64
65 for (i = 0; i < EVDI_DEVICE_COUNT_MAX; ++i) {
66 if (ctx->devices[i] == NULL)
67 return i;
68 }
69 return -ENOMEM;
70 }
71
72 bool evdi_platform_device_is_free(struct platform_device *pdev)
73 {
74 struct drm_device *drm_dev =
75 (struct drm_device *)platform_get_drvdata(pdev);
76 struct evdi_device *evdi = drm_dev->dev_private;
77
78 if (evdi && !evdi_painter_is_connected(evdi))
79 return true;
80 return false;
81 }
82
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org