* [PATCH] staging: fwserial: replace 'a' with '(a)' to avoid precedence issues
@ 2017-02-14 17:56 Arushi Singhal
2017-02-14 18:08 ` Greg KH
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Arushi Singhal @ 2017-02-14 17:56 UTC (permalink / raw)
To: gregkh; +Cc: devel, linux-kernel
Macro argument 'a' may be better as '(a)' to avoid precedence issues as
reported by checkpatch.pl
Signed-off-by: Arushi Singhal <arushisinghal19971997@gmail.com>
---
drivers/staging/fwserial/fwserial.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/staging/fwserial/fwserial.c b/drivers/staging/fwserial/fwserial.c
index 41a49c8194e5..bdfc0a8c7af3 100644
--- a/drivers/staging/fwserial/fwserial.c
+++ b/drivers/staging/fwserial/fwserial.c
@@ -98,7 +98,7 @@ struct fwtty_transaction {
};
};
-#define to_device(a, b) (a->b)
+#define to_device((a), b) (a->b)
#define fwtty_err(p, fmt, ...) \
dev_err(to_device(p, device), fmt, ##__VA_ARGS__)
#define fwtty_info(p, fmt, ...) \
--
2.11.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH] staging: fwserial: replace 'a' with '(a)' to avoid precedence issues
2017-02-14 17:56 [PATCH] staging: fwserial: replace 'a' with '(a)' to avoid precedence issues Arushi Singhal
@ 2017-02-14 18:08 ` Greg KH
2017-02-15 8:14 ` Geert Uytterhoeven
2017-02-14 20:27 ` kbuild test robot
2017-02-14 21:17 ` kbuild test robot
2 siblings, 1 reply; 6+ messages in thread
From: Greg KH @ 2017-02-14 18:08 UTC (permalink / raw)
To: Arushi Singhal; +Cc: devel, linux-kernel
On Tue, Feb 14, 2017 at 11:26:20PM +0530, Arushi Singhal wrote:
> Macro argument 'a' may be better as '(a)' to avoid precedence issues as
> reported by checkpatch.pl
>
> Signed-off-by: Arushi Singhal <arushisinghal19971997@gmail.com>
> ---
> drivers/staging/fwserial/fwserial.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/staging/fwserial/fwserial.c b/drivers/staging/fwserial/fwserial.c
> index 41a49c8194e5..bdfc0a8c7af3 100644
> --- a/drivers/staging/fwserial/fwserial.c
> +++ b/drivers/staging/fwserial/fwserial.c
> @@ -98,7 +98,7 @@ struct fwtty_transaction {
> };
> };
>
> -#define to_device(a, b) (a->b)
> +#define to_device((a), b) (a->b)
Really? Why do we even have this macro at all? Can it just be removed?
thanks,
greg k-h
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] staging: fwserial: replace 'a' with '(a)' to avoid precedence issues
2017-02-14 17:56 [PATCH] staging: fwserial: replace 'a' with '(a)' to avoid precedence issues Arushi Singhal
2017-02-14 18:08 ` Greg KH
@ 2017-02-14 20:27 ` kbuild test robot
2017-02-14 21:17 ` kbuild test robot
2 siblings, 0 replies; 6+ messages in thread
From: kbuild test robot @ 2017-02-14 20:27 UTC (permalink / raw)
To: Arushi Singhal; +Cc: kbuild-all, gregkh, devel, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 21415 bytes --]
Hi Arushi,
[auto build test ERROR on staging/staging-testing]
[also build test ERROR on v4.10-rc8 next-20170214]
[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/Arushi-Singhal/staging-fwserial-replace-a-with-a-to-avoid-precedence-issues/20170215-020955
config: i386-randconfig-s0-02131304 (attached as .config)
compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901
reproduce:
# save the attached .config to linux build tree
make ARCH=i386
All error/warnings (new ones prefixed by >>):
>> drivers/staging/fwserial/fwserial.c:101:19: error: "(" may not appear in macro parameter list
#define to_device((a), b) (a->b)
^
In file included from drivers/staging/fwserial/fwserial.c:21:0:
drivers/staging/fwserial/fwserial.c: In function 'fwtty_log_tx_error':
>> drivers/staging/fwserial/fwserial.c:111:22: error: implicit declaration of function 'to_device' [-Werror=implicit-function-declaration]
dev_err_ratelimited(to_device(p, device), fmt, ##__VA_ARGS__)
^
include/linux/device.h:1364:13: note: in definition of macro 'dev_level_ratelimited'
dev_level(dev, fmt, ##__VA_ARGS__); \
^~~
>> drivers/staging/fwserial/fwserial.c:111:2: note: in expansion of macro 'dev_err_ratelimited'
dev_err_ratelimited(to_device(p, device), fmt, ##__VA_ARGS__)
^~~~~~~~~~~~~~~~~~~
>> drivers/staging/fwserial/fwserial.c:201:3: note: in expansion of macro 'fwtty_err_ratelimited'
fwtty_err_ratelimited(port, "card busy\n");
^~~~~~~~~~~~~~~~~~~~~
>> drivers/staging/fwserial/fwserial.c:111:35: error: 'device' undeclared (first use in this function)
dev_err_ratelimited(to_device(p, device), fmt, ##__VA_ARGS__)
^
include/linux/device.h:1364:13: note: in definition of macro 'dev_level_ratelimited'
dev_level(dev, fmt, ##__VA_ARGS__); \
^~~
>> drivers/staging/fwserial/fwserial.c:111:2: note: in expansion of macro 'dev_err_ratelimited'
dev_err_ratelimited(to_device(p, device), fmt, ##__VA_ARGS__)
^~~~~~~~~~~~~~~~~~~
>> drivers/staging/fwserial/fwserial.c:201:3: note: in expansion of macro 'fwtty_err_ratelimited'
fwtty_err_ratelimited(port, "card busy\n");
^~~~~~~~~~~~~~~~~~~~~
drivers/staging/fwserial/fwserial.c:111:35: note: each undeclared identifier is reported only once for each function it appears in
dev_err_ratelimited(to_device(p, device), fmt, ##__VA_ARGS__)
^
include/linux/device.h:1364:13: note: in definition of macro 'dev_level_ratelimited'
dev_level(dev, fmt, ##__VA_ARGS__); \
^~~
>> drivers/staging/fwserial/fwserial.c:111:2: note: in expansion of macro 'dev_err_ratelimited'
dev_err_ratelimited(to_device(p, device), fmt, ##__VA_ARGS__)
^~~~~~~~~~~~~~~~~~~
>> drivers/staging/fwserial/fwserial.c:201:3: note: in expansion of macro 'fwtty_err_ratelimited'
fwtty_err_ratelimited(port, "card busy\n");
^~~~~~~~~~~~~~~~~~~~~
In file included from include/linux/printk.h:320:0,
from include/linux/kernel.h:13,
from include/linux/sched.h:17,
from drivers/staging/fwserial/fwserial.c:19:
drivers/staging/fwserial/fwserial.c: In function '__fwtty_restart_tx':
drivers/staging/fwserial/fwserial.c:109:23: error: 'device' undeclared (first use in this function)
dev_dbg(to_device(p, device), "%s: " fmt, __func__, ##__VA_ARGS__)
^
include/linux/dynamic_debug.h:134:34: note: in definition of macro 'dynamic_dev_dbg'
__dynamic_dev_dbg(&descriptor, dev, fmt, \
^~~
>> drivers/staging/fwserial/fwserial.c:109:2: note: in expansion of macro 'dev_dbg'
dev_dbg(to_device(p, device), "%s: " fmt, __func__, ##__VA_ARGS__)
^~~~~~~
>> drivers/staging/fwserial/fwserial.c:290:2: note: in expansion of macro 'fwtty_dbg'
fwtty_dbg(port, "fifo len: %d avail: %d\n", len, avail);
^~~~~~~~~
drivers/staging/fwserial/fwserial.c: In function 'fwtty_update_port_status':
drivers/staging/fwserial/fwserial.c:109:23: error: 'device' undeclared (first use in this function)
dev_dbg(to_device(p, device), "%s: " fmt, __func__, ##__VA_ARGS__)
^
include/linux/dynamic_debug.h:134:34: note: in definition of macro 'dynamic_dev_dbg'
__dynamic_dev_dbg(&descriptor, dev, fmt, \
^~~
>> drivers/staging/fwserial/fwserial.c:109:2: note: in expansion of macro 'dev_dbg'
dev_dbg(to_device(p, device), "%s: " fmt, __func__, ##__VA_ARGS__)
^~~~~~~
drivers/staging/fwserial/fwserial.c:327:2: note: in expansion of macro 'fwtty_dbg'
fwtty_dbg(port, "status: %x delta: %x\n", status, delta);
^~~~~~~~~
drivers/staging/fwserial/fwserial.c: In function 'fwtty_emit_breaks':
drivers/staging/fwserial/fwserial.c:109:23: error: 'device' undeclared (first use in this function)
dev_dbg(to_device(p, device), "%s: " fmt, __func__, ##__VA_ARGS__)
^
include/linux/dynamic_debug.h:134:34: note: in definition of macro 'dynamic_dev_dbg'
__dynamic_dev_dbg(&descriptor, dev, fmt, \
^~~
>> drivers/staging/fwserial/fwserial.c:109:2: note: in expansion of macro 'dev_dbg'
dev_dbg(to_device(p, device), "%s: " fmt, __func__, ##__VA_ARGS__)
^~~~~~~
drivers/staging/fwserial/fwserial.c:523:2: note: in expansion of macro 'fwtty_dbg'
fwtty_dbg(port, "sending %d brks\n", n);
^~~~~~~~~
drivers/staging/fwserial/fwserial.c: In function 'fwtty_rx':
drivers/staging/fwserial/fwserial.c:109:23: error: 'device' undeclared (first use in this function)
dev_dbg(to_device(p, device), "%s: " fmt, __func__, ##__VA_ARGS__)
^
include/linux/dynamic_debug.h:134:34: note: in definition of macro 'dynamic_dev_dbg'
__dynamic_dev_dbg(&descriptor, dev, fmt, \
^~~
>> drivers/staging/fwserial/fwserial.c:109:2: note: in expansion of macro 'dev_dbg'
dev_dbg(to_device(p, device), "%s: " fmt, __func__, ##__VA_ARGS__)
^~~~~~~
drivers/staging/fwserial/fwserial.c:547:2: note: in expansion of macro 'fwtty_dbg'
fwtty_dbg(port, "%d\n", n);
^~~~~~~~~
In file included from drivers/staging/fwserial/fwserial.c:21:0:
drivers/staging/fwserial/fwserial.c: In function 'fwtty_port_handler':
>> drivers/staging/fwserial/fwserial.c:111:35: error: 'device' undeclared (first use in this function)
dev_err_ratelimited(to_device(p, device), fmt, ##__VA_ARGS__)
^
include/linux/device.h:1364:13: note: in definition of macro 'dev_level_ratelimited'
dev_level(dev, fmt, ##__VA_ARGS__); \
^~~
>> drivers/staging/fwserial/fwserial.c:111:2: note: in expansion of macro 'dev_err_ratelimited'
dev_err_ratelimited(to_device(p, device), fmt, ##__VA_ARGS__)
^~~~~~~~~~~~~~~~~~~
drivers/staging/fwserial/fwserial.c:630:3: note: in expansion of macro 'fwtty_err_ratelimited'
fwtty_err_ratelimited(port, "ignoring unauthenticated data\n");
^~~~~~~~~~~~~~~~~~~~~
In file included from include/linux/printk.h:320:0,
from include/linux/kernel.h:13,
from include/linux/sched.h:17,
from drivers/staging/fwserial/fwserial.c:19:
drivers/staging/fwserial/fwserial.c: In function 'fwtty_tx_complete':
drivers/staging/fwserial/fwserial.c:109:23: error: 'device' undeclared (first use in this function)
dev_dbg(to_device(p, device), "%s: " fmt, __func__, ##__VA_ARGS__)
^
include/linux/dynamic_debug.h:134:34: note: in definition of macro 'dynamic_dev_dbg'
__dynamic_dev_dbg(&descriptor, dev, fmt, \
^~~
>> drivers/staging/fwserial/fwserial.c:109:2: note: in expansion of macro 'dev_dbg'
dev_dbg(to_device(p, device), "%s: " fmt, __func__, ##__VA_ARGS__)
^~~~~~~
drivers/staging/fwserial/fwserial.c:687:2: note: in expansion of macro 'fwtty_dbg'
fwtty_dbg(port, "rcode: %d\n", rcode);
^~~~~~~~~
drivers/staging/fwserial/fwserial.c: In function 'fwtty_tx':
drivers/staging/fwserial/fwserial.c:109:23: error: 'device' undeclared (first use in this function)
dev_dbg(to_device(p, device), "%s: " fmt, __func__, ##__VA_ARGS__)
^
include/linux/dynamic_debug.h:134:34: note: in definition of macro 'dynamic_dev_dbg'
__dynamic_dev_dbg(&descriptor, dev, fmt, \
^~~
>> drivers/staging/fwserial/fwserial.c:109:2: note: in expansion of macro 'dev_dbg'
dev_dbg(to_device(p, device), "%s: " fmt, __func__, ##__VA_ARGS__)
^~~~~~~
drivers/staging/fwserial/fwserial.c:750:3: note: in expansion of macro 'fwtty_dbg'
fwtty_dbg(port, "out: %u rem: %d\n", txn->dma_pended.len, n);
^~~~~~~~~
drivers/staging/fwserial/fwserial.c: In function 'fwtty_write_xchar':
drivers/staging/fwserial/fwserial.c:109:23: error: 'device' undeclared (first use in this function)
dev_dbg(to_device(p, device), "%s: " fmt, __func__, ##__VA_ARGS__)
^
include/linux/dynamic_debug.h:134:34: note: in definition of macro 'dynamic_dev_dbg'
__dynamic_dev_dbg(&descriptor, dev, fmt, \
^~~
>> drivers/staging/fwserial/fwserial.c:109:2: note: in expansion of macro 'dev_dbg'
dev_dbg(to_device(p, device), "%s: " fmt, __func__, ##__VA_ARGS__)
^~~~~~~
drivers/staging/fwserial/fwserial.c:820:2: note: in expansion of macro 'fwtty_dbg'
fwtty_dbg(port, "%02x\n", ch);
^~~~~~~~~
drivers/staging/fwserial/fwserial.c: In function 'fwtty_port_dtr_rts':
drivers/staging/fwserial/fwserial.c:109:23: error: 'device' undeclared (first use in this function)
dev_dbg(to_device(p, device), "%s: " fmt, __func__, ##__VA_ARGS__)
^
include/linux/dynamic_debug.h:134:34: note: in definition of macro 'dynamic_dev_dbg'
__dynamic_dev_dbg(&descriptor, dev, fmt, \
^~~
>> drivers/staging/fwserial/fwserial.c:109:2: note: in expansion of macro 'dev_dbg'
dev_dbg(to_device(p, device), "%s: " fmt, __func__, ##__VA_ARGS__)
^~~~~~~
drivers/staging/fwserial/fwserial.c:905:2: note: in expansion of macro 'fwtty_dbg'
fwtty_dbg(port, "on/off: %d\n", on);
^~~~~~~~~
drivers/staging/fwserial/fwserial.c: In function 'fwtty_port_carrier_raised':
drivers/staging/fwserial/fwserial.c:109:23: error: 'device' undeclared (first use in this function)
dev_dbg(to_device(p, device), "%s: " fmt, __func__, ##__VA_ARGS__)
^
include/linux/dynamic_debug.h:134:34: note: in definition of macro 'dynamic_dev_dbg'
__dynamic_dev_dbg(&descriptor, dev, fmt, \
^~~
vim +101 drivers/staging/fwserial/fwserial.c
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 */
16
17 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
18
> 19 #include <linux/sched.h>
20 #include <linux/slab.h>
> 21 #include <linux/device.h>
22 #include <linux/mod_devicetable.h>
23 #include <linux/rculist.h>
24 #include <linux/workqueue.h>
25 #include <linux/ratelimit.h>
26 #include <linux/bug.h>
27 #include <linux/uaccess.h>
28
29 #include "fwserial.h"
30
31 #define be32_to_u64(hi, lo) ((u64)be32_to_cpu(hi) << 32 | be32_to_cpu(lo))
32
33 #define LINUX_VENDOR_ID 0xd00d1eU /* same id used in card root directory */
34 #define FWSERIAL_VERSION 0x00e81cU /* must be unique within LINUX_VENDOR_ID */
35
36 /* configurable options */
37 static int num_ttys = 4; /* # of std ttys to create per fw_card */
38 /* - doubles as loopback port index */
39 static bool auto_connect = true; /* try to VIRT_CABLE to every peer */
40 static bool create_loop_dev = true; /* create a loopback device for each card */
41
42 module_param_named(ttys, num_ttys, int, 0644);
43 module_param_named(auto, auto_connect, bool, 0644);
44 module_param_named(loop, create_loop_dev, bool, 0644);
45
46 /*
47 * Threshold below which the tty is woken for writing
48 * - should be equal to WAKEUP_CHARS in drivers/tty/n_tty.c because
49 * even if the writer is woken, n_tty_poll() won't set POLLOUT until
50 * our fifo is below this level
51 */
52 #define WAKEUP_CHARS 256
53
54 /**
55 * fwserial_list: list of every fw_serial created for each fw_card
56 * See discussion in fwserial_probe.
57 */
58 static LIST_HEAD(fwserial_list);
59 static DEFINE_MUTEX(fwserial_list_mutex);
60
61 /**
62 * port_table: array of tty ports allocated to each fw_card
63 *
64 * tty ports are allocated during probe when an fw_serial is first
65 * created for a given fw_card. Ports are allocated in a contiguous block,
66 * each block consisting of 'num_ports' ports.
67 */
68 static struct fwtty_port *port_table[MAX_TOTAL_PORTS];
69 static DEFINE_MUTEX(port_table_lock);
70 static bool port_table_corrupt;
71 #define FWTTY_INVALID_INDEX MAX_TOTAL_PORTS
72
73 #define loop_idx(port) (((port)->index) / num_ports)
74 #define table_idx(loop) ((loop) * num_ports + num_ttys)
75
76 /* total # of tty ports created per fw_card */
77 static int num_ports;
78
79 /* slab used as pool for struct fwtty_transactions */
80 static struct kmem_cache *fwtty_txn_cache;
81
82 struct tty_driver *fwtty_driver;
83 static struct tty_driver *fwloop_driver;
84
85 static struct dentry *fwserial_debugfs;
86
87 struct fwtty_transaction;
88 typedef void (*fwtty_transaction_cb)(struct fw_card *card, int rcode,
89 void *data, size_t length,
90 struct fwtty_transaction *txn);
91
92 struct fwtty_transaction {
93 struct fw_transaction fw_txn;
94 fwtty_transaction_cb callback;
95 struct fwtty_port *port;
96 union {
97 struct dma_pending dma_pended;
98 };
99 };
100
> 101 #define to_device((a), b) (a->b)
102 #define fwtty_err(p, fmt, ...) \
103 dev_err(to_device(p, device), fmt, ##__VA_ARGS__)
104 #define fwtty_info(p, fmt, ...) \
105 dev_info(to_device(p, device), fmt, ##__VA_ARGS__)
106 #define fwtty_notice(p, fmt, ...) \
107 dev_notice(to_device(p, device), fmt, ##__VA_ARGS__)
108 #define fwtty_dbg(p, fmt, ...) \
> 109 dev_dbg(to_device(p, device), "%s: " fmt, __func__, ##__VA_ARGS__)
110 #define fwtty_err_ratelimited(p, fmt, ...) \
> 111 dev_err_ratelimited(to_device(p, device), fmt, ##__VA_ARGS__)
112
113 #ifdef DEBUG
114 static inline void debug_short_write(struct fwtty_port *port, int c, int n)
115 {
116 int avail;
117
118 if (n < c) {
119 spin_lock_bh(&port->lock);
120 avail = dma_fifo_avail(&port->tx_fifo);
121 spin_unlock_bh(&port->lock);
122 fwtty_dbg(port, "short write: avail:%d req:%d wrote:%d\n",
123 avail, c, n);
124 }
125 }
126 #else
127 #define debug_short_write(port, c, n)
128 #endif
129
130 static struct fwtty_peer *__fwserial_peer_by_node_id(struct fw_card *card,
131 int generation, int id);
132
133 #ifdef FWTTY_PROFILING
134
135 static void fwtty_profile_fifo(struct fwtty_port *port, unsigned int *stat)
136 {
137 spin_lock_bh(&port->lock);
138 fwtty_profile_data(stat, dma_fifo_avail(&port->tx_fifo));
139 spin_unlock_bh(&port->lock);
140 }
141
142 static void fwtty_dump_profile(struct seq_file *m, struct stats *stats)
143 {
144 /* for each stat, print sum of 0 to 2^k, then individually */
145 int k = 4;
146 unsigned int sum;
147 int j;
148 char t[10];
149
150 snprintf(t, 10, "< %d", 1 << k);
151 seq_printf(m, "\n%14s %6s", " ", t);
152 for (j = k + 1; j < DISTRIBUTION_MAX_INDEX; ++j)
153 seq_printf(m, "%6d", 1 << j);
154
155 ++k;
156 for (j = 0, sum = 0; j <= k; ++j)
157 sum += stats->reads[j];
158 seq_printf(m, "\n%14s: %6d", "reads", sum);
159 for (j = k + 1; j <= DISTRIBUTION_MAX_INDEX; ++j)
160 seq_printf(m, "%6d", stats->reads[j]);
161
162 for (j = 0, sum = 0; j <= k; ++j)
163 sum += stats->writes[j];
164 seq_printf(m, "\n%14s: %6d", "writes", sum);
165 for (j = k + 1; j <= DISTRIBUTION_MAX_INDEX; ++j)
166 seq_printf(m, "%6d", stats->writes[j]);
167
168 for (j = 0, sum = 0; j <= k; ++j)
169 sum += stats->txns[j];
170 seq_printf(m, "\n%14s: %6d", "txns", sum);
171 for (j = k + 1; j <= DISTRIBUTION_MAX_INDEX; ++j)
172 seq_printf(m, "%6d", stats->txns[j]);
173
174 for (j = 0, sum = 0; j <= k; ++j)
175 sum += stats->unthrottle[j];
176 seq_printf(m, "\n%14s: %6d", "avail @ unthr", sum);
177 for (j = k + 1; j <= DISTRIBUTION_MAX_INDEX; ++j)
178 seq_printf(m, "%6d", stats->unthrottle[j]);
179 }
180
181 #else
182 #define fwtty_profile_fifo(port, stat)
183 #define fwtty_dump_profile(m, stats)
184 #endif
185
186 /*
187 * Returns the max receive packet size for the given node
188 * Devices which are OHCI v1.0/ v1.1/ v1.2-draft or RFC 2734 compliant
189 * are required by specification to support max_rec of 8 (512 bytes) or more.
190 */
191 static inline int device_max_receive(struct fw_device *fw_device)
192 {
193 /* see IEEE 1394-2008 table 8-8 */
194 return min(2 << fw_device->max_rec, 4096);
195 }
196
197 static void fwtty_log_tx_error(struct fwtty_port *port, int rcode)
198 {
199 switch (rcode) {
200 case RCODE_SEND_ERROR:
> 201 fwtty_err_ratelimited(port, "card busy\n");
202 break;
203 case RCODE_ADDRESS_ERROR:
204 fwtty_err_ratelimited(port, "bad unit addr or write length\n");
205 break;
206 case RCODE_DATA_ERROR:
207 fwtty_err_ratelimited(port, "failed rx\n");
208 break;
209 case RCODE_NO_ACK:
210 fwtty_err_ratelimited(port, "missing ack\n");
211 break;
212 case RCODE_BUSY:
213 fwtty_err_ratelimited(port, "remote busy\n");
214 break;
215 default:
216 fwtty_err_ratelimited(port, "failed tx: %d\n", rcode);
217 }
218 }
219
220 static void fwtty_txn_constructor(void *this)
221 {
222 struct fwtty_transaction *txn = this;
223
224 init_timer(&txn->fw_txn.split_timeout_timer);
225 }
226
227 static void fwtty_common_callback(struct fw_card *card, int rcode,
228 void *payload, size_t len, void *cb_data)
229 {
230 struct fwtty_transaction *txn = cb_data;
231 struct fwtty_port *port = txn->port;
232
233 if (port && rcode != RCODE_COMPLETE)
234 fwtty_log_tx_error(port, rcode);
235 if (txn->callback)
236 txn->callback(card, rcode, payload, len, txn);
237 kmem_cache_free(fwtty_txn_cache, txn);
238 }
239
240 static int fwtty_send_data_async(struct fwtty_peer *peer, int tcode,
241 unsigned long long addr, void *payload,
242 size_t len, fwtty_transaction_cb callback,
243 struct fwtty_port *port)
244 {
245 struct fwtty_transaction *txn;
246 int generation;
247
248 txn = kmem_cache_alloc(fwtty_txn_cache, GFP_ATOMIC);
249 if (!txn)
250 return -ENOMEM;
251
252 txn->callback = callback;
253 txn->port = port;
254
255 generation = peer->generation;
256 smp_rmb();
257 fw_send_request(peer->serial->card, &txn->fw_txn, tcode,
258 peer->node_id, generation, peer->speed, addr, payload,
259 len, fwtty_common_callback, txn);
260 return 0;
261 }
262
263 static void fwtty_send_txn_async(struct fwtty_peer *peer,
264 struct fwtty_transaction *txn, int tcode,
265 unsigned long long addr, void *payload,
266 size_t len, fwtty_transaction_cb callback,
267 struct fwtty_port *port)
268 {
269 int generation;
270
271 txn->callback = callback;
272 txn->port = port;
273
274 generation = peer->generation;
275 smp_rmb();
276 fw_send_request(peer->serial->card, &txn->fw_txn, tcode,
277 peer->node_id, generation, peer->speed, addr, payload,
278 len, fwtty_common_callback, txn);
279 }
280
281 static void __fwtty_restart_tx(struct fwtty_port *port)
282 {
283 int len, avail;
284
285 len = dma_fifo_out_level(&port->tx_fifo);
286 if (len)
287 schedule_delayed_work(&port->drain, 0);
288 avail = dma_fifo_avail(&port->tx_fifo);
289
> 290 fwtty_dbg(port, "fifo len: %d avail: %d\n", len, avail);
291 }
292
293 static void fwtty_restart_tx(struct fwtty_port *port)
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 26825 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] staging: fwserial: replace 'a' with '(a)' to avoid precedence issues
2017-02-14 17:56 [PATCH] staging: fwserial: replace 'a' with '(a)' to avoid precedence issues Arushi Singhal
2017-02-14 18:08 ` Greg KH
2017-02-14 20:27 ` kbuild test robot
@ 2017-02-14 21:17 ` kbuild test robot
2 siblings, 0 replies; 6+ messages in thread
From: kbuild test robot @ 2017-02-14 21:17 UTC (permalink / raw)
To: Arushi Singhal; +Cc: kbuild-all, gregkh, devel, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 8529 bytes --]
Hi Arushi,
[auto build test ERROR on staging/staging-testing]
[also build test ERROR on v4.10-rc8 next-20170214]
[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/Arushi-Singhal/staging-fwserial-replace-a-with-a-to-avoid-precedence-issues/20170215-020955
config: m68k-allyesconfig (attached as .config)
compiler: m68k-linux-gcc (GCC) 4.9.0
reproduce:
wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
make.cross ARCH=m68k
All error/warnings (new ones prefixed by >>):
drivers/staging/fwserial/fwserial.c:101:19: error: "(" may not appear in macro parameter list
#define to_device((a), b) (a->b)
^
In file included from include/linux/device.h:27:0,
from drivers/staging/fwserial/fwserial.c:21:
drivers/staging/fwserial/fwserial.c: In function 'fwtty_log_tx_error':
>> include/linux/ratelimit.h:36:9: error: implicit declaration of function 'to_device' [-Werror=implicit-function-declaration]
struct ratelimit_state name = \
^
>> include/linux/device.h:1360:9: note: in expansion of macro 'DEFINE_RATELIMIT_STATE'
static DEFINE_RATELIMIT_STATE(_rs, \
^
>> include/linux/device.h:1374:2: note: in expansion of macro 'dev_level_ratelimited'
dev_level_ratelimited(dev_err, dev, fmt, ##__VA_ARGS__)
^
drivers/staging/fwserial/fwserial.c:111:2: note: in expansion of macro 'dev_err_ratelimited'
dev_err_ratelimited(to_device(p, device), fmt, ##__VA_ARGS__)
^
drivers/staging/fwserial/fwserial.c:201:3: note: in expansion of macro 'fwtty_err_ratelimited'
fwtty_err_ratelimited(port, "card busy\n");
^
In file included from drivers/staging/fwserial/fwserial.c:21:0:
drivers/staging/fwserial/fwserial.c:111:35: error: 'device' undeclared (first use in this function)
dev_err_ratelimited(to_device(p, device), fmt, ##__VA_ARGS__)
^
include/linux/device.h:1364:13: note: in definition of macro 'dev_level_ratelimited'
dev_level(dev, fmt, ##__VA_ARGS__); \
^
drivers/staging/fwserial/fwserial.c:111:2: note: in expansion of macro 'dev_err_ratelimited'
dev_err_ratelimited(to_device(p, device), fmt, ##__VA_ARGS__)
^
drivers/staging/fwserial/fwserial.c:201:3: note: in expansion of macro 'fwtty_err_ratelimited'
fwtty_err_ratelimited(port, "card busy\n");
^
drivers/staging/fwserial/fwserial.c:111:35: note: each undeclared identifier is reported only once for each function it appears in
dev_err_ratelimited(to_device(p, device), fmt, ##__VA_ARGS__)
^
include/linux/device.h:1364:13: note: in definition of macro 'dev_level_ratelimited'
dev_level(dev, fmt, ##__VA_ARGS__); \
^
drivers/staging/fwserial/fwserial.c:111:2: note: in expansion of macro 'dev_err_ratelimited'
dev_err_ratelimited(to_device(p, device), fmt, ##__VA_ARGS__)
^
drivers/staging/fwserial/fwserial.c:201:3: note: in expansion of macro 'fwtty_err_ratelimited'
fwtty_err_ratelimited(port, "card busy\n");
^
In file included from include/linux/printk.h:320:0,
from include/linux/kernel.h:13,
from include/linux/sched.h:17,
from drivers/staging/fwserial/fwserial.c:19:
drivers/staging/fwserial/fwserial.c: In function '__fwtty_restart_tx':
drivers/staging/fwserial/fwserial.c:109:23: error: 'device' undeclared (first use in this function)
dev_dbg(to_device(p, device), "%s: " fmt, __func__, ##__VA_ARGS__)
^
include/linux/dynamic_debug.h:134:34: note: in definition of macro 'dynamic_dev_dbg'
__dynamic_dev_dbg(&descriptor, dev, fmt, \
^
drivers/staging/fwserial/fwserial.c:109:2: note: in expansion of macro 'dev_dbg'
dev_dbg(to_device(p, device), "%s: " fmt, __func__, ##__VA_ARGS__)
^
drivers/staging/fwserial/fwserial.c:290:2: note: in expansion of macro 'fwtty_dbg'
fwtty_dbg(port, "fifo len: %d avail: %d\n", len, avail);
^
drivers/staging/fwserial/fwserial.c: In function 'fwtty_update_port_status':
drivers/staging/fwserial/fwserial.c:109:23: error: 'device' undeclared (first use in this function)
dev_dbg(to_device(p, device), "%s: " fmt, __func__, ##__VA_ARGS__)
^
include/linux/dynamic_debug.h:134:34: note: in definition of macro 'dynamic_dev_dbg'
__dynamic_dev_dbg(&descriptor, dev, fmt, \
^
drivers/staging/fwserial/fwserial.c:109:2: note: in expansion of macro 'dev_dbg'
dev_dbg(to_device(p, device), "%s: " fmt, __func__, ##__VA_ARGS__)
^
drivers/staging/fwserial/fwserial.c:327:2: note: in expansion of macro 'fwtty_dbg'
fwtty_dbg(port, "status: %x delta: %x\n", status, delta);
^
drivers/staging/fwserial/fwserial.c: In function 'fwtty_emit_breaks':
drivers/staging/fwserial/fwserial.c:109:23: error: 'device' undeclared (first use in this function)
dev_dbg(to_device(p, device), "%s: " fmt, __func__, ##__VA_ARGS__)
^
include/linux/dynamic_debug.h:134:34: note: in definition of macro 'dynamic_dev_dbg'
__dynamic_dev_dbg(&descriptor, dev, fmt, \
^
drivers/staging/fwserial/fwserial.c:109:2: note: in expansion of macro 'dev_dbg'
dev_dbg(to_device(p, device), "%s: " fmt, __func__, ##__VA_ARGS__)
^
drivers/staging/fwserial/fwserial.c:523:2: note: in expansion of macro 'fwtty_dbg'
fwtty_dbg(port, "sending %d brks\n", n);
^
drivers/staging/fwserial/fwserial.c: In function 'fwtty_rx':
drivers/staging/fwserial/fwserial.c:109:23: error: 'device' undeclared (first use in this function)
dev_dbg(to_device(p, device), "%s: " fmt, __func__, ##__VA_ARGS__)
^
include/linux/dynamic_debug.h:134:34: note: in definition of macro 'dynamic_dev_dbg'
__dynamic_dev_dbg(&descriptor, dev, fmt, \
^
drivers/staging/fwserial/fwserial.c:109:2: note: in expansion of macro 'dev_dbg'
dev_dbg(to_device(p, device), "%s: " fmt, __func__, ##__VA_ARGS__)
^
drivers/staging/fwserial/fwserial.c:547:2: note: in expansion of macro 'fwtty_dbg'
fwtty_dbg(port, "%d\n", n);
^
In file included from drivers/staging/fwserial/fwserial.c:21:0:
drivers/staging/fwserial/fwserial.c: In function 'fwtty_port_handler':
drivers/staging/fwserial/fwserial.c:111:35: error: 'device' undeclared (first use in this function)
dev_err_ratelimited(to_device(p, device), fmt, ##__VA_ARGS__)
^
include/linux/device.h:1364:13: note: in definition of macro 'dev_level_ratelimited'
dev_level(dev, fmt, ##__VA_ARGS__); \
^
drivers/staging/fwserial/fwserial.c:111:2: note: in expansion of macro 'dev_err_ratelimited'
dev_err_ratelimited(to_device(p, device), fmt, ##__VA_ARGS__)
^
vim +/to_device +36 include/linux/ratelimit.h
717115e1 Dave Young 2008-07-25 30
89e3f909 Dmitry Monakhov 2014-12-12 31 #define RATELIMIT_STATE_INIT_DISABLED \
89e3f909 Dmitry Monakhov 2014-12-12 32 RATELIMIT_STATE_INIT(ratelimit_state, 0, DEFAULT_RATELIMIT_BURST)
89e3f909 Dmitry Monakhov 2014-12-12 33
89e3f909 Dmitry Monakhov 2014-12-12 34 #define DEFINE_RATELIMIT_STATE(name, interval_init, burst_init) \
89e3f909 Dmitry Monakhov 2014-12-12 35 \
89e3f909 Dmitry Monakhov 2014-12-12 @36 struct ratelimit_state name = \
89e3f909 Dmitry Monakhov 2014-12-12 37 RATELIMIT_STATE_INIT(name, interval_init, burst_init) \
89e3f909 Dmitry Monakhov 2014-12-12 38
f40c396a OGAWA Hirofumi 2010-05-24 39 static inline void ratelimit_state_init(struct ratelimit_state *rs,
:::::: The code at line 36 was first introduced by commit
:::::: 89e3f90995b370fa46922eece62ea23f039a202d ratelimit: add initialization macro
:::::: TO: Dmitry Monakhov <dmonakhov@openvz.org>
:::::: CC: Linus Torvalds <torvalds@linux-foundation.org>
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 39290 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] staging: fwserial: replace 'a' with '(a)' to avoid precedence issues
2017-02-14 18:08 ` Greg KH
@ 2017-02-15 8:14 ` Geert Uytterhoeven
2017-02-15 9:31 ` Joe Perches
0 siblings, 1 reply; 6+ messages in thread
From: Geert Uytterhoeven @ 2017-02-15 8:14 UTC (permalink / raw)
To: Greg KH; +Cc: Arushi Singhal, driverdevel, linux-kernel
On Tue, Feb 14, 2017 at 7:08 PM, Greg KH <gregkh@linuxfoundation.org> wrote:
> On Tue, Feb 14, 2017 at 11:26:20PM +0530, Arushi Singhal wrote:
>> Macro argument 'a' may be better as '(a)' to avoid precedence issues as
>> reported by checkpatch.pl
>>
>> Signed-off-by: Arushi Singhal <arushisinghal19971997@gmail.com>
>> ---
>> drivers/staging/fwserial/fwserial.c | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/drivers/staging/fwserial/fwserial.c b/drivers/staging/fwserial/fwserial.c
>> index 41a49c8194e5..bdfc0a8c7af3 100644
>> --- a/drivers/staging/fwserial/fwserial.c
>> +++ b/drivers/staging/fwserial/fwserial.c
>> @@ -98,7 +98,7 @@ struct fwtty_transaction {
>> };
>> };
>>
>> -#define to_device(a, b) (a->b)
>> +#define to_device((a), b) (a->b)
>
> Really?
Actually compiling files should be a requirement for submitting patches,
cfr. the response from kbuild test report.
The parentheses should be added to the second "a" instead ;-)
> Why do we even have this macro at all? Can it just be removed?
Definitely. Would be much easier to read.
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] staging: fwserial: replace 'a' with '(a)' to avoid precedence issues
2017-02-15 8:14 ` Geert Uytterhoeven
@ 2017-02-15 9:31 ` Joe Perches
0 siblings, 0 replies; 6+ messages in thread
From: Joe Perches @ 2017-02-15 9:31 UTC (permalink / raw)
To: Geert Uytterhoeven, Greg KH; +Cc: Arushi Singhal, driverdevel, linux-kernel
On Wed, 2017-02-15 at 09:14 +0100, Geert Uytterhoeven wrote:
> On Tue, Feb 14, 2017 at 7:08 PM, Greg KH <gregkh@linuxfoundation.org> wrote:
> > On Tue, Feb 14, 2017 at 11:26:20PM +0530, Arushi Singhal wrote:
> > > Macro argument 'a' may be better as '(a)' to avoid precedence issues as
> > > reported by checkpatch.pl
> > >
> > > Signed-off-by: Arushi Singhal <arushisinghal19971997@gmail.com>
> > > ---
> > > drivers/staging/fwserial/fwserial.c | 2 +-
> > > 1 file changed, 1 insertion(+), 1 deletion(-)
> > >
> > > diff --git a/drivers/staging/fwserial/fwserial.c b/drivers/staging/fwserial/fwserial.c
> > > index 41a49c8194e5..bdfc0a8c7af3 100644
> > > --- a/drivers/staging/fwserial/fwserial.c
> > > +++ b/drivers/staging/fwserial/fwserial.c
> > > @@ -98,7 +98,7 @@ struct fwtty_transaction {
> > > };
> > > };
> > >
> > > -#define to_device(a, b) (a->b)
> > > +#define to_device((a), b) (a->b)
> >
> > Really?
>
> Actually compiling files should be a requirement for submitting patches,
> cfr. the response from kbuild test report.
> The parentheses should be added to the second "a" instead ;-)
>
> > Why do we even have this macro at all? Can it just be removed?
>
> Definitely. Would be much easier to read.
The use of & in some of the fwtty_<level> macro uses
suggest it would be easier to read if the fwtty_macros
were removed altogether and simply converted to their
dev_<level> equivalents.
$ git grep -E -w -n "fwtty_(err|info|notice|warn|dbg|err_ratelimited)"| cat
drivers/staging/fwserial/fwserial.c:101:#define fwtty_err(p, fmt, ...) \
drivers/staging/fwserial/fwserial.c:103:#define fwtty_info(p, fmt, ...) \
drivers/staging/fwserial/fwserial.c:105:#define fwtty_notice(p, fmt, ...) \
drivers/staging/fwserial/fwserial.c:107:#define fwtty_dbg(p, fmt, ...) \
drivers/staging/fwserial/fwserial.c:109:#define fwtty_err_ratelimited(p, fmt, ...) \
drivers/staging/fwserial/fwserial.c:121: fwtty_dbg(port, "short write: avail:%d req:%d wrote:%d\n",
drivers/staging/fwserial/fwserial.c:200: fwtty_err_ratelimited(port, "card busy\n");
drivers/staging/fwserial/fwserial.c:203: fwtty_err_ratelimited(port, "bad unit addr or write length\n");
drivers/staging/fwserial/fwserial.c:206: fwtty_err_ratelimited(port, "failed rx\n");
drivers/staging/fwserial/fwserial.c:209: fwtty_err_ratelimited(port, "missing ack\n");
drivers/staging/fwserial/fwserial.c:212: fwtty_err_ratelimited(port, "remote busy\n");
drivers/staging/fwserial/fwserial.c:215: fwtty_err_ratelimited(port, "failed tx: %d\n", rcode);
drivers/staging/fwserial/fwserial.c:289: fwtty_dbg(port, "fifo len: %d avail: %d\n", len, avail);
drivers/staging/fwserial/fwserial.c:326: fwtty_dbg(port, "status: %x delta: %x\n", status, delta);
drivers/staging/fwserial/fwserial.c:522: fwtty_dbg(port, "sending %d brks\n", n);
drivers/staging/fwserial/fwserial.c:546: fwtty_dbg(port, "%d\n", n);
drivers/staging/fwserial/fwserial.c:586: fwtty_err_ratelimited(port, "flip buffer overrun\n");
drivers/staging/fwserial/fwserial.c:629: fwtty_err_ratelimited(port, "ignoring unauthenticated data\n");
drivers/staging/fwserial/fwserial.c:686: fwtty_dbg(port, "rcode: %d\n", rcode);
drivers/staging/fwserial/fwserial.c:749: fwtty_dbg(port, "out: %u rem: %d\n", txn->dma_pended.len, n);
drivers/staging/fwserial/fwserial.c:759: fwtty_err_ratelimited(port, "fifo err: %d\n",
drivers/staging/fwserial/fwserial.c:819: fwtty_dbg(port, "%02x\n", ch);
drivers/staging/fwserial/fwserial.c:904: fwtty_dbg(port, "on/off: %d\n", on);
drivers/staging/fwserial/fwserial.c:932: fwtty_dbg(port, "%d\n", rc);
drivers/staging/fwserial/fwserial.c:1110: fwtty_dbg(port, "%d\n", c);
drivers/staging/fwserial/fwserial.c:1137: fwtty_dbg(port, "%d\n", n);
drivers/staging/fwserial/fwserial.c:1151: fwtty_dbg(port, "%d\n", n);
drivers/staging/fwserial/fwserial.c:1160: fwtty_dbg(port, "%02x\n", ch);
drivers/staging/fwserial/fwserial.c:1187: fwtty_dbg(port, "CRTSCTS: %d\n", C_CRTSCTS(tty) != 0);
drivers/staging/fwserial/fwserial.c:1341: fwtty_dbg(port, "%d\n", state);
drivers/staging/fwserial/fwserial.c:1378: fwtty_dbg(port, "%x\n", tiocm);
drivers/staging/fwserial/fwserial.c:1388: fwtty_dbg(port, "set: %x clear: %x\n", set, clear);
drivers/staging/fwserial/fwserial.c:1700: fwtty_info(&peer->unit, "peer (guid:%016llx) connected on %s\n",
drivers/staging/fwserial/fwserial.c:1722: fwtty_dbg(&peer->unit, "mgmt write error: %d\n", rcode);
drivers/staging/fwserial/fwserial.c:1844: fwtty_err(&peer->unit, "avail ports in use\n");
drivers/staging/fwserial/fwserial.c:1982: fwtty_err(card, "unknown card (guid %016llx)\n",
drivers/staging/fwserial/fwserial.c:2012: fwtty_dbg(card, "peer(%d:%x) guid: %016llx\n",
drivers/staging/fwserial/fwserial.c:2108: fwtty_info(&peer->unit, "peer added (guid:%016llx)\n",
drivers/staging/fwserial/fwserial.c:2172: fwtty_info(&peer->unit, "peer removed (guid:%016llx)\n",
drivers/staging/fwserial/fwserial.c:2259: fwtty_err(&unit, "no space in port table\n");
drivers/staging/fwserial/fwserial.c:2270: fwtty_err(&unit, "register tty device error (%d)\n",
drivers/staging/fwserial/fwserial.c:2288: fwtty_err(&unit, "create loop device failed (%d)\n",
drivers/staging/fwserial/fwserial.c:2309: fwtty_notice(&unit, "TTY over FireWire on device %s (guid %016llx)\n",
drivers/staging/fwserial/fwserial.c:2316: fwtty_err(&unit, "unable to add peer unit device (%d)\n", err);
drivers/staging/fwserial/fwserial.c:2557: fwtty_err(&peer->unit, "no more ports avail\n");
drivers/staging/fwserial/fwserial.c:2599: fwtty_err(&peer->unit, "PLUG_RSP error (%d)\n", rcode);
drivers/staging/fwserial/fwserial.c:2650: fwtty_err(&peer->unit, "UNPLUG_RSP error (%d)\n",
drivers/staging/fwserial/fwserial.c:2685: fwtty_err(&peer->unit, "peer already removed\n");
drivers/staging/fwserial/fwserial.c:2692: fwtty_dbg(&peer->unit, "mgmt: hdr.code: %04hx\n", pkt->hdr.code);
drivers/staging/fwserial/fwserial.c:2697: fwtty_err(&peer->unit, "plug req: busy\n");
drivers/staging/fwserial/fwserial.c:2712: fwtty_notice(&peer->unit, "NACK plug rsp\n");
drivers/staging/fwserial/fwserial.c:2728: fwtty_err(&peer->unit, "unplug req: busy\n");
drivers/staging/fwserial/fwserial.c:2741: fwtty_notice(&peer->unit, "NACK unplug?\n");
drivers/staging/fwserial/fwserial.c:2748: fwtty_err(&peer->unit, "unknown mgmt code %d\n",
drivers/staging/fwserial/fwserial.c:2782: fwtty_dbg(card, "peer(%d:%x) not found\n", generation, source);
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2017-02-15 9:31 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-02-14 17:56 [PATCH] staging: fwserial: replace 'a' with '(a)' to avoid precedence issues Arushi Singhal
2017-02-14 18:08 ` Greg KH
2017-02-15 8:14 ` Geert Uytterhoeven
2017-02-15 9:31 ` Joe Perches
2017-02-14 20:27 ` kbuild test robot
2017-02-14 21:17 ` kbuild test robot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).