Re: [PATCH] usb: gadget: functions: add ftrace export over USB

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Felipe,

I love your patch! Yet something to improve:

[auto build test ERROR on balbi-usb/next]
[also build test ERROR on v5.1-rc1 next-20190321]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Felipe-Balbi/usb-gadget-functions-add-ftrace-export-over-USB/20190322-081552
base:   https://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb.git next
config: m68k-allyesconfig (attached as .config)
compiler: m68k-linux-gnu-gcc (Debian 7.2.0-11) 7.2.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        GCC_VERSION=7.2.0 make.cross ARCH=m68k 

All error/warnings (new ones prefixed by >>):

>> drivers/usb/gadget/function/f-trace.c:26:22: error: field 'ftrace' has incomplete type
     struct trace_export ftrace;
                         ^~~~~~
   In file included from include/linux/ioport.h:13:0,
                    from include/linux/device.h:15,
                    from drivers/usb/gadget/function/f-trace.c:13:
   drivers/usb/gadget/function/f-trace.c: In function 'ftrace_write':
>> include/linux/kernel.h:998:32: error: dereferencing pointer to incomplete type 'struct trace_export'
     BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
                                   ^~~~~~
   include/linux/compiler.h:324:9: note: in definition of macro '__compiletime_assert'
      if (!(condition))     \
            ^~~~~~~~~
   include/linux/compiler.h:344:2: note: in expansion of macro '_compiletime_assert'
     _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
     ^~~~~~~~~~~~~~~~~~~
   include/linux/build_bug.h:39:37: note: in expansion of macro 'compiletime_assert'
    #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
                                        ^~~~~~~~~~~~~~~~~~
   include/linux/kernel.h:998:2: note: in expansion of macro 'BUILD_BUG_ON_MSG'
     BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
     ^~~~~~~~~~~~~~~~
   include/linux/kernel.h:998:20: note: in expansion of macro '__same_type'
     BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
                       ^~~~~~~~~~~
>> drivers/usb/gadget/function/f-trace.c:39:29: note: in expansion of macro 'container_of'
    #define ftrace_to_trace(f) (container_of((f), struct usb_ftrace, ftrace))
                                ^~~~~~~~~~~~
>> drivers/usb/gadget/function/f-trace.c:175:30: note: in expansion of macro 'ftrace_to_trace'
     struct usb_ftrace  *trace = ftrace_to_trace(ftrace);
                                 ^~~~~~~~~~~~~~~
   drivers/usb/gadget/function/f-trace.c: In function 'ftrace_bind':
>> drivers/usb/gadget/function/f-trace.c:295:8: error: implicit declaration of function 'register_ftrace_export'; did you mean 'register_chrdev_region'? [-Werror=implicit-function-declaration]
     ret = register_ftrace_export(&trace->ftrace);
           ^~~~~~~~~~~~~~~~~~~~~~
           register_chrdev_region
   drivers/usb/gadget/function/f-trace.c: In function 'ftrace_unbind':
>> drivers/usb/gadget/function/f-trace.c:323:2: error: implicit declaration of function 'unregister_ftrace_export'; did you mean 'unregister_chrdev_region'? [-Werror=implicit-function-declaration]
     unregister_ftrace_export(&trace->ftrace);
     ^~~~~~~~~~~~~~~~~~~~~~~~
     unregister_chrdev_region
   cc1: some warnings being treated as errors
--
   drivers/usb//gadget/function/f-trace.c:26:22: error: field 'ftrace' has incomplete type
     struct trace_export ftrace;
                         ^~~~~~
   In file included from include/linux/ioport.h:13:0,
                    from include/linux/device.h:15,
                    from drivers/usb//gadget/function/f-trace.c:13:
   drivers/usb//gadget/function/f-trace.c: In function 'ftrace_write':
>> include/linux/kernel.h:998:32: error: dereferencing pointer to incomplete type 'struct trace_export'
     BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
                                   ^~~~~~
   include/linux/compiler.h:324:9: note: in definition of macro '__compiletime_assert'
      if (!(condition))     \
            ^~~~~~~~~
   include/linux/compiler.h:344:2: note: in expansion of macro '_compiletime_assert'
     _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
     ^~~~~~~~~~~~~~~~~~~
   include/linux/build_bug.h:39:37: note: in expansion of macro 'compiletime_assert'
    #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
                                        ^~~~~~~~~~~~~~~~~~
   include/linux/kernel.h:998:2: note: in expansion of macro 'BUILD_BUG_ON_MSG'
     BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
     ^~~~~~~~~~~~~~~~
   include/linux/kernel.h:998:20: note: in expansion of macro '__same_type'
     BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
                       ^~~~~~~~~~~
   drivers/usb//gadget/function/f-trace.c:39:29: note: in expansion of macro 'container_of'
    #define ftrace_to_trace(f) (container_of((f), struct usb_ftrace, ftrace))
                                ^~~~~~~~~~~~
   drivers/usb//gadget/function/f-trace.c:175:30: note: in expansion of macro 'ftrace_to_trace'
     struct usb_ftrace  *trace = ftrace_to_trace(ftrace);
                                 ^~~~~~~~~~~~~~~
   drivers/usb//gadget/function/f-trace.c: In function 'ftrace_bind':
   drivers/usb//gadget/function/f-trace.c:295:8: error: implicit declaration of function 'register_ftrace_export'; did you mean 'register_chrdev_region'? [-Werror=implicit-function-declaration]
     ret = register_ftrace_export(&trace->ftrace);
           ^~~~~~~~~~~~~~~~~~~~~~
           register_chrdev_region
   drivers/usb//gadget/function/f-trace.c: In function 'ftrace_unbind':
   drivers/usb//gadget/function/f-trace.c:323:2: error: implicit declaration of function 'unregister_ftrace_export'; did you mean 'unregister_chrdev_region'? [-Werror=implicit-function-declaration]
     unregister_ftrace_export(&trace->ftrace);
     ^~~~~~~~~~~~~~~~~~~~~~~~
     unregister_chrdev_region
   cc1: some warnings being treated as errors

vim +/ftrace +26 drivers/usb/gadget/function/f-trace.c

    24	
    25	struct usb_ftrace {
  > 26		struct trace_export ftrace;
    27		struct usb_function function;
    28		struct work_struct queue_work;
    29		spinlock_t lock;
    30	
    31		struct list_head list;
    32		struct list_head pending;
    33		struct list_head queued;
    34	
    35		struct usb_ep *in;
    36	
    37		u8 intf_id;
    38	};
  > 39	#define ftrace_to_trace(f)	(container_of((f), struct usb_ftrace, ftrace))
    40	#define work_to_trace(w)	(container_of((w), struct usb_ftrace, queue_work))
    41	#define to_trace(f)		(container_of((f), struct usb_ftrace, function))
    42	
    43	#define FTRACE_REQUEST_QUEUE_LENGTH	250
    44	
    45	static inline struct usb_request *next_request(struct list_head *list)
    46	{
    47		return list_first_entry_or_null(list, struct usb_request, list);
    48	}
    49	
    50	struct usb_ftrace_opts {
    51		struct usb_function_instance func_inst;
    52	};
    53	#define to_opts(fi)	(container_of((fi), struct usb_ftrace_opts, func_inst))
    54	
    55	static struct usb_interface_descriptor ftrace_intf_desc = {
    56		.bLength		= USB_DT_INTERFACE_SIZE,
    57		.bDescriptorType	= USB_DT_INTERFACE,
    58	
    59		.bAlternateSetting	= 0,
    60		.bNumEndpoints		= 1,
    61		.bInterfaceClass	= USB_CLASS_VENDOR_SPEC,
    62		.bInterfaceSubClass	= USB_SUBCLASS_VENDOR_SPEC,
    63	};
    64	
    65	/* Super-Speed Support */
    66	static struct usb_endpoint_descriptor ftrace_ss_in_desc = {
    67		.bLength		= USB_DT_ENDPOINT_SIZE,
    68		.bDescriptorType	= USB_DT_ENDPOINT,
    69	
    70		.bEndpointAddress	= USB_DIR_IN,
    71		.bmAttributes		= USB_ENDPOINT_XFER_BULK,
    72		.wMaxPacketSize		= cpu_to_le16(1024),
    73	};
    74	
    75	static struct usb_ss_ep_comp_descriptor ftrace_ss_in_comp_desc = {
    76		.bLength		= USB_DT_SS_EP_COMP_SIZE,
    77		.bDescriptorType	= USB_DT_SS_ENDPOINT_COMP,
    78	
    79		.bMaxBurst		= 15,
    80	};
    81	
    82	static struct usb_descriptor_header *ftrace_ss_function[] = {
    83		(struct usb_descriptor_header *) &ftrace_intf_desc,
    84		(struct usb_descriptor_header *) &ftrace_ss_in_desc,
    85		(struct usb_descriptor_header *) &ftrace_ss_in_comp_desc,
    86		NULL,
    87	};
    88	
    89	/* High-Speed Support */
    90	static struct usb_endpoint_descriptor ftrace_hs_in_desc = {
    91		.bLength		= USB_DT_ENDPOINT_SIZE,
    92		.bDescriptorType	= USB_DT_ENDPOINT,
    93	
    94		.bEndpointAddress	= USB_DIR_IN,
    95		.bmAttributes		= USB_ENDPOINT_XFER_BULK,
    96		.wMaxPacketSize		= cpu_to_le16(512),
    97	};
    98	
    99	static struct usb_descriptor_header *ftrace_hs_function[] = {
   100		(struct usb_descriptor_header *) &ftrace_intf_desc,
   101		(struct usb_descriptor_header *) &ftrace_hs_in_desc,
   102		NULL,
   103	};
   104	
   105	/* Full-Speed Support */
   106	static struct usb_endpoint_descriptor ftrace_fs_in_desc = {
   107		.bLength		= USB_DT_ENDPOINT_SIZE,
   108		.bDescriptorType	= USB_DT_ENDPOINT,
   109	
   110		.bEndpointAddress	= USB_DIR_IN,
   111		.bmAttributes		= USB_ENDPOINT_XFER_BULK,
   112		.wMaxPacketSize		= cpu_to_le16(64),
   113	};
   114	
   115	static struct usb_descriptor_header *ftrace_fs_function[] = {
   116		(struct usb_descriptor_header *) &ftrace_intf_desc,
   117		(struct usb_descriptor_header *) &ftrace_fs_in_desc,
   118		NULL,
   119	};
   120	
   121	static struct usb_string ftrace_string_defs[] = {
   122		[0].s = "Linux Ftrace Export",
   123		{ },
   124	};
   125	
   126	static struct usb_gadget_strings ftrace_string_table = {
   127		.language		= 0x0409, /* en-US */
   128		.strings		= ftrace_string_defs,
   129	};
   130	
   131	static struct usb_gadget_strings *ftrace_strings[] = {
   132		&ftrace_string_table,
   133		NULL,
   134	};
   135	
   136	/* ------------------------------------------------------------------------ */
   137	
   138	static void ftrace_complete(struct usb_ep *ep, struct usb_request *req)
   139	{
   140		struct usb_ftrace		*trace = req->context;
   141	
   142		kfree(req->buf);
   143		list_move_tail(&req->list, &trace->list);
   144	}
   145	
   146	static void ftrace_queue_work(struct work_struct *work)
   147	{
   148		struct usb_ftrace		*trace = work_to_trace(work);
   149		struct usb_request		*req;
   150		struct usb_request		*tmp;
   151		struct list_head		local_list;
   152	
   153		spin_lock_irq(&trace->lock);
   154	restart:
   155		list_replace_init(&trace->pending, &local_list);
   156		spin_unlock_irq(&trace->lock);
   157	
   158		list_for_each_entry_safe(req, tmp, &local_list, list) {
   159			int			ret;
   160	
   161			ret = usb_ep_queue(trace->in, req, GFP_KERNEL);
   162			if (!ret)
   163				list_move_tail(&req->list, &trace->queued);
   164		}
   165	
   166		spin_lock_irq(&trace->lock);
   167		if (!list_empty(&trace->pending))
   168			goto restart;
   169		spin_unlock_irq(&trace->lock);
   170	}
   171	
   172	static void notrace ftrace_write(struct trace_export *ftrace, const void *buf,
   173			unsigned int len)
   174	{
 > 175		struct usb_ftrace		*trace = ftrace_to_trace(ftrace);
   176		struct usb_request		*req = next_request(&trace->list);
   177	
   178		if (!req)
   179			return;
   180	
   181		if (!trace->in->enabled)
   182			return;
   183	
   184		req->buf = kmemdup(buf, len, GFP_ATOMIC);
   185		req->length = len;
   186		req->context = trace;
   187		req->complete = ftrace_complete;
   188		list_move_tail(&req->list, &trace->pending);
   189	
   190		schedule_work(&trace->queue_work);
   191	}
   192	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Attachment: .config.gz
Description: application/gzip


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux