Hi Felipe, [auto build test ERROR on balbi-usb/next] [also build test ERROR on v4.12-rc4 next-20170609] [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/20170610-060059 base: https://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb.git next config: alpha-allyesconfig (attached as .config) compiler: alpha-linux-gnu-gcc (Debian 6.3.0-18) 6.3.0 20170516 reproduce: wget https://raw.githubusercontent.com/01org/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree make.cross ARCH=alpha All error/warnings (new ones prefixed by >>): >> drivers/usb/gadget/function/f-trace.c:25:22: error: field 'ftrace' has incomplete type struct trace_export ftrace; ^~~~~~ In file included from include/linux/list.h:8:0, from include/linux/kobject.h:20, from include/linux/device.h:17, from drivers/usb/gadget/function/f-trace.c:12: drivers/usb/gadget/function/f-trace.c: In function 'ftrace_write': include/linux/kernel.h:854:48: error: initialization from incompatible pointer type [-Werror=incompatible-pointer-types] const typeof( ((type *)0)->member ) *__mptr = (ptr); \ ^ >> drivers/usb/gadget/function/f-trace.c:38: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:174:30: note: in expansion of macro 'ftrace_to_trace' struct usb_ftrace *trace = ftrace_to_trace(ftrace); ^~~~~~~~~~~~~~~ include/linux/kernel.h:854:48: note: (near initialization for 'trace') const typeof( ((type *)0)->member ) *__mptr = (ptr); \ ^ >> drivers/usb/gadget/function/f-trace.c:38: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:174: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:294:8: error: implicit declaration of function 'register_ftrace_export' [-Werror=implicit-function-declaration] ret = register_ftrace_export(&trace->ftrace); ^~~~~~~~~~~~~~~~~~~~~~ drivers/usb/gadget/function/f-trace.c: In function 'ftrace_unbind': >> drivers/usb/gadget/function/f-trace.c:322:2: error: implicit declaration of function 'unregister_ftrace_export' [-Werror=implicit-function-declaration] unregister_ftrace_export(&trace->ftrace); ^~~~~~~~~~~~~~~~~~~~~~~~ cc1: some warnings being treated as errors vim +/ftrace +25 drivers/usb/gadget/function/f-trace.c 6 * 7 * This program is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU General Public License v2 as 9 * published by the Free Software Foundation. 10 */ 11 > 12 #include <linux/device.h> 13 #include <linux/kernel.h> 14 #include <linux/list.h> 15 #include <linux/module.h> 16 #include <linux/slab.h> 17 #include <linux/spinlock.h> 18 #include <linux/trace.h> 19 #include <linux/usb.h> 20 #include <linux/usb/composite.h> 21 #include <linux/usb/gadget.h> 22 #include <linux/workqueue.h> 23 24 struct usb_ftrace { > 25 struct trace_export ftrace; 26 struct usb_function function; 27 struct work_struct queue_work; 28 spinlock_t lock; 29 30 struct list_head list; 31 struct list_head pending; 32 struct list_head queued; 33 34 struct usb_ep *in; 35 36 u8 intf_id; 37 }; > 38 #define ftrace_to_trace(f) (container_of((f), struct usb_ftrace, ftrace)) 39 #define work_to_trace(w) (container_of((w), struct usb_ftrace, queue_work)) 40 #define to_trace(f) (container_of((f), struct usb_ftrace, function)) 41 42 #define FTRACE_REQUEST_QUEUE_LENGTH 250 43 44 static inline struct usb_request *next_request(struct list_head *list) 45 { 46 return list_first_entry_or_null(list, struct usb_request, list); 47 } 48 49 struct usb_ftrace_opts { 50 struct usb_function_instance func_inst; 51 }; 52 #define to_opts(fi) (container_of((fi), struct usb_ftrace_opts, func_inst)) 53 54 static struct usb_interface_descriptor ftrace_intf_desc = { 55 .bLength = USB_DT_INTERFACE_SIZE, 56 .bDescriptorType = USB_DT_INTERFACE, 57 58 .bAlternateSetting = 0, 59 .bNumEndpoints = 1, 60 .bInterfaceClass = USB_CLASS_VENDOR_SPEC, 61 .bInterfaceSubClass = USB_SUBCLASS_VENDOR_SPEC, 62 }; 63 64 /* Super-Speed Support */ 65 static struct usb_endpoint_descriptor ftrace_ss_in_desc = { 66 .bLength = USB_DT_ENDPOINT_SIZE, 67 .bDescriptorType = USB_DT_ENDPOINT, 68 69 .bEndpointAddress = USB_DIR_IN, 70 .bmAttributes = USB_ENDPOINT_XFER_BULK, 71 .wMaxPacketSize = cpu_to_le16(1024), 72 }; 73 74 static struct usb_ss_ep_comp_descriptor ftrace_ss_in_comp_desc = { 75 .bLength = USB_DT_SS_EP_COMP_SIZE, 76 .bDescriptorType = USB_DT_SS_ENDPOINT_COMP, 77 78 .bMaxBurst = 15, 79 }; 80 81 static struct usb_descriptor_header *ftrace_ss_function[] = { 82 (struct usb_descriptor_header *) &ftrace_intf_desc, 83 (struct usb_descriptor_header *) &ftrace_ss_in_desc, 84 (struct usb_descriptor_header *) &ftrace_ss_in_comp_desc, 85 NULL, 86 }; 87 88 /* High-Speed Support */ 89 static struct usb_endpoint_descriptor ftrace_hs_in_desc = { 90 .bLength = USB_DT_ENDPOINT_SIZE, 91 .bDescriptorType = USB_DT_ENDPOINT, 92 93 .bEndpointAddress = USB_DIR_IN, 94 .bmAttributes = USB_ENDPOINT_XFER_BULK, 95 .wMaxPacketSize = cpu_to_le16(512), 96 }; 97 98 static struct usb_descriptor_header *ftrace_hs_function[] = { 99 (struct usb_descriptor_header *) &ftrace_intf_desc, 100 (struct usb_descriptor_header *) &ftrace_hs_in_desc, 101 NULL, 102 }; 103 104 /* Full-Speed Support */ 105 static struct usb_endpoint_descriptor ftrace_fs_in_desc = { 106 .bLength = USB_DT_ENDPOINT_SIZE, 107 .bDescriptorType = USB_DT_ENDPOINT, 108 109 .bEndpointAddress = USB_DIR_IN, 110 .bmAttributes = USB_ENDPOINT_XFER_BULK, 111 .wMaxPacketSize = cpu_to_le16(64), 112 }; 113 114 static struct usb_descriptor_header *ftrace_fs_function[] = { 115 (struct usb_descriptor_header *) &ftrace_intf_desc, 116 (struct usb_descriptor_header *) &ftrace_fs_in_desc, 117 NULL, 118 }; 119 120 static struct usb_string ftrace_string_defs[] = { 121 [0].s = "Linux Ftrace Export", 122 { }, 123 }; 124 125 static struct usb_gadget_strings ftrace_string_table = { 126 .language = 0x0409, /* en-US */ 127 .strings = ftrace_string_defs, 128 }; 129 130 static struct usb_gadget_strings *ftrace_strings[] = { 131 &ftrace_string_table, 132 NULL, 133 }; 134 135 /* ------------------------------------------------------------------------ */ 136 137 static void ftrace_complete(struct usb_ep *ep, struct usb_request *req) 138 { 139 struct usb_ftrace *trace = req->context; 140 141 kfree(req->buf); 142 list_move_tail(&req->list, &trace->list); 143 } 144 145 static void ftrace_queue_work(struct work_struct *work) 146 { 147 struct usb_ftrace *trace = work_to_trace(work); 148 struct usb_request *req; 149 struct usb_request *tmp; 150 struct list_head local_list; 151 152 spin_lock_irq(&trace->lock); 153 restart: 154 list_replace_init(&trace->pending, &local_list); 155 spin_unlock_irq(&trace->lock); 156 157 list_for_each_entry_safe(req, tmp, &local_list, list) { 158 int ret; 159 160 ret = usb_ep_queue(trace->in, req, GFP_KERNEL); 161 if (!ret) 162 list_move_tail(&req->list, &trace->queued); 163 } 164 165 spin_lock_irq(&trace->lock); 166 if (!list_empty(&trace->pending)) 167 goto restart; 168 spin_unlock_irq(&trace->lock); 169 } 170 171 static void notrace ftrace_write(struct trace_export *ftrace, const void *buf, 172 unsigned int len) 173 { > 174 struct usb_ftrace *trace = ftrace_to_trace(ftrace); 175 struct usb_request *req = next_request(&trace->list); 176 177 if (!req) --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
Attachment:
.config.gz
Description: application/gzip