lkml.org 
[lkml]   [2017]   [Jun]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH] usb: gadget: functions: add ftrace export over USB
    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
    [unhandled content-type:application/gzip]
    \
     
     \ /
      Last update: 2017-06-12 01:54    [W:2.965 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site