tree: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-next head: 8f94390226487bcb86c554ddc12eef0d27bdec3b commit: b27560e4d9e5240b5544c9c5650c7442e482646e [43/44] usb: core: Add "quirks" parameter for usbcore config: sparc64-allyesconfig (attached as .config) compiler: sparc64-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 git checkout b27560e4d9e5240b5544c9c5650c7442e482646e # save the attached .config to linux build tree make.cross ARCH=sparc64
All error/warnings (new ones prefixed by >>):
>> drivers/usb/core/quirks.c:27:59: warning: 'struct kernel_param' declared
>> inside parameter list will not be visible outside of this definition or
>> declaration
static int quirks_param_set(const char *val, const struct kernel_param *kp)
^~~~~~~~~~~~
drivers/usb/core/quirks.c: In function 'quirks_param_set':
>> drivers/usb/core/quirks.c:135:9: error: implicit declaration of function
>> 'param_set_copystring' [-Werror=implicit-function-declaration]
return param_set_copystring(val, kp);
^~~~~~~~~~~~~~~~~~~~
drivers/usb/core/quirks.c: At top level:
>> drivers/usb/core/quirks.c:138:21: error: variable 'quirks_param_ops' has
>> initializer but incomplete type
static const struct kernel_param_ops quirks_param_ops = {
^~~~~~~~~~~~~~~~
>> drivers/usb/core/quirks.c:139:3: error: 'const struct kernel_param_ops' has
>> no member named 'set'
.set = quirks_param_set,
^~~
>> drivers/usb/core/quirks.c:139:9: warning: excess elements in struct
>> initializer
.set = quirks_param_set,
^~~~~~~~~~~~~~~~
drivers/usb/core/quirks.c:139:9: note: (near initialization for
'quirks_param_ops')
>> drivers/usb/core/quirks.c:140:3: error: 'const struct kernel_param_ops' has
>> no member named 'get'
.get = param_get_string,
^~~
>> drivers/usb/core/quirks.c:140:9: error: 'param_get_string' undeclared here
>> (not in a function); did you mean 'page_get_link'?
.get = param_get_string,
^~~~~~~~~~~~~~~~
page_get_link
drivers/usb/core/quirks.c:140:9: warning: excess elements in struct
initializer
drivers/usb/core/quirks.c:140:9: note: (near initialization for
'quirks_param_ops')
>> drivers/usb/core/quirks.c:143:15: error: variable 'quirks_param_string' has
>> initializer but incomplete type
static struct kparam_string quirks_param_string = {
^~~~~~~~~~~~~
>> drivers/usb/core/quirks.c:144:3: error: 'struct kparam_string' has no member
>> named 'maxlen'
.maxlen = sizeof(quirks_param),
^~~~~~
drivers/usb/core/quirks.c:144:12: warning: excess elements in struct
initializer
.maxlen = sizeof(quirks_param),
^~~~~~
drivers/usb/core/quirks.c:144:12: note: (near initialization for
'quirks_param_string')
>> drivers/usb/core/quirks.c:145:3: error: 'struct kparam_string' has no member
>> named 'string'
.string = quirks_param,
^~~~~~
drivers/usb/core/quirks.c:145:12: warning: excess elements in struct
initializer
.string = quirks_param,
^~~~~~~~~~~~
drivers/usb/core/quirks.c:145:12: note: (near initialization for
'quirks_param_string')
>> drivers/usb/core/quirks.c:148:25: error: expected ')' before '&' token
module_param_cb(quirks, &quirks_param_ops, &quirks_param_string, 0644);
^
>> drivers/usb/core/quirks.c:149:26: error: expected ')' before string constant
MODULE_PARM_DESC(quirks, "Add/modify USB quirks by specifying
quirks=vendorID:productID:quirks");
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/usb/core/quirks.c:138:38: error: storage size of 'quirks_param_ops'
>> isn't known
static const struct kernel_param_ops quirks_param_ops = {
^~~~~~~~~~~~~~~~
>> drivers/usb/core/quirks.c:143:29: error: storage size of
>> 'quirks_param_string' isn't known
static struct kparam_string quirks_param_string = {
^~~~~~~~~~~~~~~~~~~
drivers/usb/core/quirks.c:143:29: warning: 'quirks_param_string' defined but
not used [-Wunused-variable]
cc1: some warnings being treated as errors
vim +/param_set_copystring +135 drivers/usb/core/quirks.c
26
> 27 static int quirks_param_set(const char *val, const struct kernel_param
*kp)
28 {
29 char *p, *field;
30 u16 vid, pid;
31 u32 flags;
32 size_t i;
33
34 mutex_lock(&quirk_mutex);
35
36 if (!val || !*val) {
37 quirk_count = 0;
38 kfree(quirk_list);
39 quirk_list = NULL;
40 goto unlock;
41 }
42
43 for (quirk_count = 1, i = 0; val[i]; i++)
44 if (val[i] == ',')
45 quirk_count++;
46
47 if (quirk_list) {
48 kfree(quirk_list);
49 quirk_list = NULL;
50 }
51
52 quirk_list = kcalloc(quirk_count, sizeof(struct quirk_entry),
53 GFP_KERNEL);
54 if (!quirk_list) {
55 mutex_unlock(&quirk_mutex);
56 return -ENOMEM;
57 }
58
59 for (i = 0, p = (char *)val; p && *p;) {
60 /* Each entry consists of VID:PID:flags */
61 field = strsep(&p, ":");
62 if (!field)
63 break;
64
65 if (kstrtou16(field, 16, &vid))
66 break;
67
68 field = strsep(&p, ":");
69 if (!field)
70 break;
71
72 if (kstrtou16(field, 16, &pid))
73 break;
74
75 field = strsep(&p, ",");
76 if (!field || !*field)
77 break;
78
79 /* Collect the flags */
80 for (flags = 0; *field; field++) {
81 switch (*field) {
82 case 'a':
83 flags |= USB_QUIRK_STRING_FETCH_255;
84 break;
85 case 'b':
86 flags |= USB_QUIRK_RESET_RESUME;
87 break;
88 case 'c':
89 flags |= USB_QUIRK_NO_SET_INTF;
90 break;
91 case 'd':
92 flags |= USB_QUIRK_CONFIG_INTF_STRINGS;
93 break;
94 case 'e':
95 flags |= USB_QUIRK_RESET;
96 break;
97 case 'f':
98 flags |= USB_QUIRK_HONOR_BNUMINTERFACES;
99 break;
100 case 'g':
101 flags |= USB_QUIRK_DELAY_INIT;
102 break;
103 case 'h':
104 flags |=
USB_QUIRK_LINEAR_UFRAME_INTR_BINTERVAL;
105 break;
106 case 'i':
107 flags |= USB_QUIRK_DEVICE_QUALIFIER;
108 break;
109 case 'j':
110 flags |= USB_QUIRK_IGNORE_REMOTE_WAKEUP;
111 break;
112 case 'k':
113 flags |= USB_QUIRK_NO_LPM;
114 break;
115 case 'l':
116 flags |=
USB_QUIRK_LINEAR_FRAME_INTR_BINTERVAL;
117 break;
118 case 'm':
119 flags |= USB_QUIRK_DISCONNECT_SUSPEND;
120 break;
121 /* Ignore unrecognized flag characters */
122 }
123 }
124
125 quirk_list[i++] = (struct quirk_entry)
126 { .vid = vid, .pid = pid, .flags = flags };
127 }
128
129 if (i < quirk_count)
130 quirk_count = i;
131
132 unlock:
133 mutex_unlock(&quirk_mutex);
134
> 135 return param_set_copystring(val, kp);
136 }
137
> 138 static const struct kernel_param_ops quirks_param_ops = {
> 139 .set = quirks_param_set,
> 140 .get = param_get_string,
141 };
142
> 143 static struct kparam_string quirks_param_string = {
> 144 .maxlen = sizeof(quirks_param),
> 145 .string = quirks_param,
146 };
147
> 148 module_param_cb(quirks, &quirks_param_ops, &quirks_param_string, 0644);
> 149 MODULE_PARM_DESC(quirks, "Add/modify USB quirks by specifying
> quirks=vendorID:productID:quirks");
150
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
.config.gz
Description: application/gzip
