Blame view

Documentation/CodingStyle 35.5 KB
609d99a3b   Mauro Carvalho Chehab   Documentation/HOW...
1
  .. _codingstyle:
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
2
3
  Linux kernel coding style
  =========================
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
4
5
  
  This is a short document describing the preferred coding style for the
5d628b452   Mauro Carvalho Chehab   Documentation/Cod...
6
  linux kernel.  Coding style is very personal, and I won't **force** my
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
7
8
9
10
11
12
13
14
  views on anybody, but this is what goes for anything that I have to be
  able to maintain, and I'd prefer it for most other things too.  Please
  at least consider the points made here.
  
  First off, I'd suggest printing out a copy of the GNU coding standards,
  and NOT read it.  Burn them, it's a great symbolic gesture.
  
  Anyway, here goes:
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
15
16
  1) Indentation
  --------------
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
  
  Tabs are 8 characters, and thus indentations are also 8 characters.
  There are heretic movements that try to make indentations 4 (or even 2!)
  characters deep, and that is akin to trying to define the value of PI to
  be 3.
  
  Rationale: The whole idea behind indentation is to clearly define where
  a block of control starts and ends.  Especially when you've been looking
  at your screen for 20 straight hours, you'll find it a lot easier to see
  how the indentation works if you have large indentations.
  
  Now, some people will claim that having 8-character indentations makes
  the code move too far to the right, and makes it hard to read on a
  80-character terminal screen.  The answer to that is that if you need
  more than 3 levels of indentation, you're screwed anyway, and should fix
  your program.
  
  In short, 8-char indents make things easier to read, and have the added
  benefit of warning you when you're nesting your functions too deep.
  Heed that warning.
b3fc9941f   Randy Dunlap   [PATCH] CodingSty...
37
  The preferred way to ease multiple indentation levels in a switch statement is
b1a3459b0   Mauro Carvalho Chehab   Documentation/Cod...
38
39
  to align the ``switch`` and its subordinate ``case`` labels in the same column
  instead of ``double-indenting`` the ``case`` labels.  E.g.:
b3fc9941f   Randy Dunlap   [PATCH] CodingSty...
40

d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
41
  .. code-block:: c
b3fc9941f   Randy Dunlap   [PATCH] CodingSty...
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
  	switch (suffix) {
  	case 'G':
  	case 'g':
  		mem <<= 30;
  		break;
  	case 'M':
  	case 'm':
  		mem <<= 20;
  		break;
  	case 'K':
  	case 'k':
  		mem <<= 10;
  		/* fall through */
  	default:
  		break;
  	}
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
58
59
  Don't put multiple statements on a single line unless you have
  something to hide:
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
60
  .. code-block:: c
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
61
62
  	if (condition) do_this;
  	  do_something_everytime;
b3fc9941f   Randy Dunlap   [PATCH] CodingSty...
63
64
  Don't put multiple assignments on a single line either.  Kernel coding style
  is super simple.  Avoid tricky expressions.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
65
66
67
68
  Outside of comments, documentation and except in Kconfig, spaces are never
  used for indentation, and the above example is deliberately broken.
  
  Get a decent editor and don't leave whitespace at the end of lines.
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
69
70
  2) Breaking long lines and strings
  ----------------------------------
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
71
72
73
  
  Coding style is all about readability and maintainability using commonly
  available tools.
dff4982f5   Alan Cox   CodingStyle: rela...
74
75
  The limit on the length of lines is 80 columns and this is a strongly
  preferred limit.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
76

6f76b6fca   Josh Triplett   CodingStyle: Docu...
77
78
79
80
81
82
  Statements longer than 80 columns will be broken into sensible chunks, unless
  exceeding 80 columns significantly increases readability and does not hide
  information. Descendants are always substantially shorter than the parent and
  are placed substantially to the right. The same applies to function headers
  with a long argument list. However, never break user-visible strings such as
  printk messages, because that breaks the ability to grep for them.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
83

d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
84
85
  3) Placing Braces and Spaces
  ----------------------------
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
86
87
88
89
90
91
  
  The other issue that always comes up in C styling is the placement of
  braces.  Unlike the indent size, there are few technical reasons to
  choose one placement strategy over the other, but the preferred way, as
  shown to us by the prophets Kernighan and Ritchie, is to put the opening
  brace last on the line, and put the closing brace first, thusly:
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
92
  .. code-block:: c
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
93
94
95
  	if (x is true) {
  		we do y
  	}
b3fc9941f   Randy Dunlap   [PATCH] CodingSty...
96
97
  This applies to all non-function statement blocks (if, switch, for,
  while, do).  E.g.:
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
98
  .. code-block:: c
b3fc9941f   Randy Dunlap   [PATCH] CodingSty...
99
100
101
102
103
104
105
106
107
108
  	switch (action) {
  	case KOBJ_ADD:
  		return "add";
  	case KOBJ_REMOVE:
  		return "remove";
  	case KOBJ_CHANGE:
  		return "change";
  	default:
  		return NULL;
  	}
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
109
110
  However, there is one special case, namely functions: they have the
  opening brace at the beginning of the next line, thus:
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
111
  .. code-block:: c
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
112
113
114
115
116
117
118
  	int function(int x)
  	{
  		body of function
  	}
  
  Heretic people all over the world have claimed that this inconsistency
  is ...  well ...  inconsistent, but all right-thinking people know that
5d628b452   Mauro Carvalho Chehab   Documentation/Cod...
119
  (a) K&R are **right** and (b) K&R are right.  Besides, functions are
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
120
  special anyway (you can't nest them in C).
5d628b452   Mauro Carvalho Chehab   Documentation/Cod...
121
  Note that the closing brace is empty on a line of its own, **except** in
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
122
  the cases where it is followed by a continuation of the same statement,
b1a3459b0   Mauro Carvalho Chehab   Documentation/Cod...
123
  ie a ``while`` in a do-statement or an ``else`` in an if-statement, like
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
124
  this:
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
125
  .. code-block:: c
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
126
127
128
129
130
  	do {
  		body of do-loop
  	} while (condition);
  
  and
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
131
  .. code-block:: c
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
  	if (x == y) {
  		..
  	} else if (x > y) {
  		...
  	} else {
  		....
  	}
  
  Rationale: K&R.
  
  Also, note that this brace-placement also minimizes the number of empty
  (or almost empty) lines, without any loss of readability.  Thus, as the
  supply of new-lines on your screen is not a renewable resource (think
  25-line terminal screens here), you have more empty lines to put
  comments on.
e659ba4a0   Oliver Neukum   CodingStyle: star...
147
  Do not unnecessarily use braces where a single statement will do.
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
148
  .. code-block:: c
09677e0ff   Pavel Kretov   Documentation/Cod...
149
150
  	if (condition)
  		action();
e659ba4a0   Oliver Neukum   CodingStyle: star...
151

38829dc9d   Harry Wei   Documentation/Cod...
152
  and
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
153
  .. code-block:: none
09677e0ff   Pavel Kretov   Documentation/Cod...
154
155
156
157
  	if (condition)
  		do_this();
  	else
  		do_that();
38829dc9d   Harry Wei   Documentation/Cod...
158

b218ab0a5   Antonio Ospite   Documentation: up...
159
160
  This does not apply if only one branch of a conditional statement is a single
  statement; in the latter case use braces in both branches:
e659ba4a0   Oliver Neukum   CodingStyle: star...
161

d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
162
  .. code-block:: c
09677e0ff   Pavel Kretov   Documentation/Cod...
163
164
165
166
167
168
  	if (condition) {
  		do_this();
  		do_that();
  	} else {
  		otherwise();
  	}
e659ba4a0   Oliver Neukum   CodingStyle: star...
169

d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
170
171
  3.1) Spaces
  ***********
b3fc9941f   Randy Dunlap   [PATCH] CodingSty...
172
173
174
175
176
  
  Linux kernel style for use of spaces depends (mostly) on
  function-versus-keyword usage.  Use a space after (most) keywords.  The
  notable exceptions are sizeof, typeof, alignof, and __attribute__, which look
  somewhat like functions (and are usually used with parentheses in Linux,
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
177
178
  although they are not required in the language, as in: ``sizeof info`` after
  ``struct fileinfo info;`` is declared).
b3fc9941f   Randy Dunlap   [PATCH] CodingSty...
179

d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
180
  So use a space after these keywords::
09677e0ff   Pavel Kretov   Documentation/Cod...
181

b3fc9941f   Randy Dunlap   [PATCH] CodingSty...
182
  	if, switch, case, for, do, while
09677e0ff   Pavel Kretov   Documentation/Cod...
183

b3fc9941f   Randy Dunlap   [PATCH] CodingSty...
184
  but not with sizeof, typeof, alignof, or __attribute__.  E.g.,
09677e0ff   Pavel Kretov   Documentation/Cod...
185

d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
186
  .. code-block:: c
b3fc9941f   Randy Dunlap   [PATCH] CodingSty...
187
188
189
  	s = sizeof(struct file);
  
  Do not add spaces around (inside) parenthesized expressions.  This example is
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
190
191
192
  **bad**:
  
  .. code-block:: c
b3fc9941f   Randy Dunlap   [PATCH] CodingSty...
193
194
195
196
  
  	s = sizeof( struct file );
  
  When declaring pointer data or a function that returns a pointer type, the
b1a3459b0   Mauro Carvalho Chehab   Documentation/Cod...
197
  preferred use of ``*`` is adjacent to the data name or function name and not
b3fc9941f   Randy Dunlap   [PATCH] CodingSty...
198
  adjacent to the type name.  Examples:
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
199
  .. code-block:: c
b3fc9941f   Randy Dunlap   [PATCH] CodingSty...
200
201
202
203
204
  	char *linux_banner;
  	unsigned long long memparse(char *ptr, char **retptr);
  	char *match_strdup(substring_t *s);
  
  Use one space around (on each side of) most binary and ternary operators,
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
205
  such as any of these::
b3fc9941f   Randy Dunlap   [PATCH] CodingSty...
206
207
  
  	=  +  -  <  >  *  /  %  |  &  ^  <=  >=  ==  !=  ?  :
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
208
  but no space after unary operators::
09677e0ff   Pavel Kretov   Documentation/Cod...
209

b3fc9941f   Randy Dunlap   [PATCH] CodingSty...
210
  	&  *  +  -  ~  !  sizeof  typeof  alignof  __attribute__  defined
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
211
  no space before the postfix increment & decrement unary operators::
09677e0ff   Pavel Kretov   Documentation/Cod...
212

b3fc9941f   Randy Dunlap   [PATCH] CodingSty...
213
  	++  --
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
214
  no space after the prefix increment & decrement unary operators::
09677e0ff   Pavel Kretov   Documentation/Cod...
215

b3fc9941f   Randy Dunlap   [PATCH] CodingSty...
216
  	++  --
b1a3459b0   Mauro Carvalho Chehab   Documentation/Cod...
217
  and no space around the ``.`` and ``->`` structure member operators.
b3fc9941f   Randy Dunlap   [PATCH] CodingSty...
218

a923fd6ae   Josh Triplett   CodingStyle: add ...
219
  Do not leave trailing whitespace at the ends of lines.  Some editors with
b1a3459b0   Mauro Carvalho Chehab   Documentation/Cod...
220
  ``smart`` indentation will insert whitespace at the beginning of new lines as
a923fd6ae   Josh Triplett   CodingStyle: add ...
221
222
223
224
225
226
227
228
229
  appropriate, so you can start typing the next line of code right away.
  However, some such editors do not remove the whitespace if you end up not
  putting a line of code there, such as if you leave a blank line.  As a result,
  you end up with lines containing trailing whitespace.
  
  Git will warn you about patches that introduce trailing whitespace, and can
  optionally strip the trailing whitespace for you; however, if applying a series
  of patches, this may make later patches in the series fail by changing their
  context lines.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
230

d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
231
232
  4) Naming
  ---------
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
233
234
235
236
  
  C is a Spartan language, and so should your naming be.  Unlike Modula-2
  and Pascal programmers, C programmers do not use cute names like
  ThisVariableIsATemporaryCounter.  A C programmer would call that
b1a3459b0   Mauro Carvalho Chehab   Documentation/Cod...
237
  variable ``tmp``, which is much easier to write, and not the least more
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
238
239
240
  difficult to understand.
  
  HOWEVER, while mixed-case names are frowned upon, descriptive names for
b1a3459b0   Mauro Carvalho Chehab   Documentation/Cod...
241
  global variables are a must.  To call a global function ``foo`` is a
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
242
  shooting offense.
5d628b452   Mauro Carvalho Chehab   Documentation/Cod...
243
  GLOBAL variables (to be used only if you **really** need them) need to
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
244
245
  have descriptive names, as do global functions.  If you have a function
  that counts the number of active users, you should call that
5d628b452   Mauro Carvalho Chehab   Documentation/Cod...
246
  ``count_active_users()`` or similar, you should **not** call it ``cntusr()``.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
247
248
249
250
251
252
253
  
  Encoding the type of a function into the name (so-called Hungarian
  notation) is brain damaged - the compiler knows the types anyway and can
  check those, and it only confuses the programmer.  No wonder MicroSoft
  makes buggy programs.
  
  LOCAL variable names should be short, and to the point.  If you have
b1a3459b0   Mauro Carvalho Chehab   Documentation/Cod...
254
255
256
  some random integer loop counter, it should probably be called ``i``.
  Calling it ``loop_counter`` is non-productive, if there is no chance of it
  being mis-understood.  Similarly, ``tmp`` can be just about any type of
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
257
258
259
260
  variable that is used to hold a temporary value.
  
  If you are afraid to mix up your local variable names, you have another
  problem, which is called the function-growth-hormone-imbalance syndrome.
b3fc9941f   Randy Dunlap   [PATCH] CodingSty...
261
  See chapter 6 (Functions).
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
262

d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
263
264
  5) Typedefs
  -----------
226a6b84a   Randy Dunlap   [PATCH] CodingSty...
265

b1a3459b0   Mauro Carvalho Chehab   Documentation/Cod...
266
  Please don't use things like ``vps_t``.
5d628b452   Mauro Carvalho Chehab   Documentation/Cod...
267
  It's a **mistake** to use typedef for structures and pointers. When you see a
226a6b84a   Randy Dunlap   [PATCH] CodingSty...
268

d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
269
  .. code-block:: c
226a6b84a   Randy Dunlap   [PATCH] CodingSty...
270
271
272
  	vps_t a;
  
  in the source, what does it mean?
226a6b84a   Randy Dunlap   [PATCH] CodingSty...
273
  In contrast, if it says
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
274
  .. code-block:: c
226a6b84a   Randy Dunlap   [PATCH] CodingSty...
275
  	struct virtual_container *a;
b1a3459b0   Mauro Carvalho Chehab   Documentation/Cod...
276
  you can actually tell what ``a`` is.
226a6b84a   Randy Dunlap   [PATCH] CodingSty...
277

b1a3459b0   Mauro Carvalho Chehab   Documentation/Cod...
278
  Lots of people think that typedefs ``help readability``. Not so. They are
226a6b84a   Randy Dunlap   [PATCH] CodingSty...
279
  useful only for:
5d628b452   Mauro Carvalho Chehab   Documentation/Cod...
280
   (a) totally opaque objects (where the typedef is actively used to **hide**
226a6b84a   Randy Dunlap   [PATCH] CodingSty...
281
       what the object is).
b1a3459b0   Mauro Carvalho Chehab   Documentation/Cod...
282
       Example: ``pte_t`` etc. opaque objects that you can only access using
226a6b84a   Randy Dunlap   [PATCH] CodingSty...
283
       the proper accessor functions.
3772ec4ad   Mauro Carvalho Chehab   Documentation/Cod...
284
285
286
287
288
       .. note::
  
         Opaqueness and ``accessor functions`` are not good in themselves.
         The reason we have them for things like pte_t etc. is that there
         really is absolutely **zero** portably accessible information there.
226a6b84a   Randy Dunlap   [PATCH] CodingSty...
289

5d628b452   Mauro Carvalho Chehab   Documentation/Cod...
290
   (b) Clear integer types, where the abstraction **helps** avoid confusion
b1a3459b0   Mauro Carvalho Chehab   Documentation/Cod...
291
       whether it is ``int`` or ``long``.
226a6b84a   Randy Dunlap   [PATCH] CodingSty...
292
293
294
  
       u8/u16/u32 are perfectly fine typedefs, although they fit into
       category (d) better than here.
3772ec4ad   Mauro Carvalho Chehab   Documentation/Cod...
295
296
297
298
       .. note::
  
         Again - there needs to be a **reason** for this. If something is
         ``unsigned long``, then there's no reason to do
226a6b84a   Randy Dunlap   [PATCH] CodingSty...
299
300
301
302
  
  	typedef unsigned long myflags_t;
  
       but if there is a clear reason for why it under certain circumstances
b1a3459b0   Mauro Carvalho Chehab   Documentation/Cod...
303
304
       might be an ``unsigned int`` and under other configurations might be
       ``unsigned long``, then by all means go ahead and use a typedef.
226a6b84a   Randy Dunlap   [PATCH] CodingSty...
305

5d628b452   Mauro Carvalho Chehab   Documentation/Cod...
306
   (c) when you use sparse to literally create a **new** type for
226a6b84a   Randy Dunlap   [PATCH] CodingSty...
307
308
309
310
311
312
       type-checking.
  
   (d) New types which are identical to standard C99 types, in certain
       exceptional circumstances.
  
       Although it would only take a short amount of time for the eyes and
b1a3459b0   Mauro Carvalho Chehab   Documentation/Cod...
313
       brain to become accustomed to the standard types like ``uint32_t``,
226a6b84a   Randy Dunlap   [PATCH] CodingSty...
314
       some people object to their use anyway.
b1a3459b0   Mauro Carvalho Chehab   Documentation/Cod...
315
       Therefore, the Linux-specific ``u8/u16/u32/u64`` types and their
226a6b84a   Randy Dunlap   [PATCH] CodingSty...
316
317
318
319
320
321
322
323
324
325
       signed equivalents which are identical to standard types are
       permitted -- although they are not mandatory in new code of your
       own.
  
       When editing existing code which already uses one or the other set
       of types, you should conform to the existing choices in that code.
  
   (e) Types safe for use in userspace.
  
       In certain structures which are visible to userspace, we cannot
b1a3459b0   Mauro Carvalho Chehab   Documentation/Cod...
326
       require C99 types and cannot use the ``u32`` form above. Thus, we
226a6b84a   Randy Dunlap   [PATCH] CodingSty...
327
328
329
330
331
332
333
       use __u32 and similar types in all structures which are shared
       with userspace.
  
  Maybe there are other cases too, but the rule should basically be to NEVER
  EVER use a typedef unless you can clearly match one of those rules.
  
  In general, a pointer, or a struct that has elements that can reasonably
5d628b452   Mauro Carvalho Chehab   Documentation/Cod...
334
  be directly accessed should **never** be a typedef.
226a6b84a   Randy Dunlap   [PATCH] CodingSty...
335

d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
336
337
  6) Functions
  ------------
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
  
  Functions should be short and sweet, and do just one thing.  They should
  fit on one or two screenfuls of text (the ISO/ANSI screen size is 80x24,
  as we all know), and do one thing and do that well.
  
  The maximum length of a function is inversely proportional to the
  complexity and indentation level of that function.  So, if you have a
  conceptually simple function that is just one long (but simple)
  case-statement, where you have to do lots of small things for a lot of
  different cases, it's OK to have a longer function.
  
  However, if you have a complex function, and you suspect that a
  less-than-gifted first-year high-school student might not even
  understand what the function is all about, you should adhere to the
  maximum limits all the more closely.  Use helper functions with
  descriptive names (you can ask the compiler to in-line them if you think
  it's performance-critical, and it will probably do a better job of it
  than you would have done).
  
  Another measure of the function is the number of local variables.  They
  shouldn't exceed 5-10, or you're doing something wrong.  Re-think the
  function, and split it into smaller pieces.  A human brain can
  generally easily keep track of about 7 different things, anything more
  and it gets confused.  You know you're brilliant, but maybe you'd like
  to understand what you did 2 weeks from now.
b3fc9941f   Randy Dunlap   [PATCH] CodingSty...
363
  In source files, separate functions with one blank line.  If the function is
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
364
365
366
367
  exported, the **EXPORT** macro for it should follow immediately after the
  closing function brace line.  E.g.:
  
  .. code-block:: c
b3fc9941f   Randy Dunlap   [PATCH] CodingSty...
368

09677e0ff   Pavel Kretov   Documentation/Cod...
369
370
371
372
373
  	int system_is_up(void)
  	{
  		return system_state == SYSTEM_RUNNING;
  	}
  	EXPORT_SYMBOL(system_is_up);
b3fc9941f   Randy Dunlap   [PATCH] CodingSty...
374
375
376
377
  
  In function prototypes, include parameter names with their data types.
  Although this is not required by the C language, it is preferred in Linux
  because it is a simple way to add valuable information for the reader.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
378

d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
379
380
  7) Centralized exiting of functions
  -----------------------------------
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
381
382
383
384
385
  
  Albeit deprecated by some people, the equivalent of the goto statement is
  used frequently by compilers in form of the unconditional jump instruction.
  
  The goto statement comes in handy when a function exits from multiple
b57a0505e   Dan Carpenter   Documentation/Cod...
386
387
  locations and some common work such as cleanup has to be done.  If there is no
  cleanup needed then just return directly.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
388

ea0403603   Dan Carpenter   CodingStyle: add ...
389
  Choose label names which say what the goto does or why the goto exists.  An
b1a3459b0   Mauro Carvalho Chehab   Documentation/Cod...
390
391
  example of a good name could be ``out_free_buffer:`` if the goto frees ``buffer``.
  Avoid using GW-BASIC names like ``err1:`` and ``err2:``, as you would have to
865a1caa4   Jean Delvare   CodingStyle: Clar...
392
393
  renumber them if you ever add or remove exit paths, and they make correctness
  difficult to verify anyway.
ea0403603   Dan Carpenter   CodingStyle: add ...
394
  The rationale for using gotos is:
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
395
396
397
398
  
  - unconditional statements are easier to understand and follow
  - nesting is reduced
  - errors by not updating individual exit points when making
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
399
    modifications are prevented
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
400
  - saves the compiler work to optimize redundant code away ;)
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
401
  .. code-block:: c
09677e0ff   Pavel Kretov   Documentation/Cod...
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
  	int fun(int a)
  	{
  		int result = 0;
  		char *buffer;
  
  		buffer = kmalloc(SIZE, GFP_KERNEL);
  		if (!buffer)
  			return -ENOMEM;
  
  		if (condition1) {
  			while (loop1) {
  				...
  			}
  			result = 1;
  			goto out_buffer;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
417
  		}
09677e0ff   Pavel Kretov   Documentation/Cod...
418
  		...
79c70c304   Jonathan Corbet   docs: Remove spac...
419
  	out_free_buffer:
09677e0ff   Pavel Kretov   Documentation/Cod...
420
421
  		kfree(buffer);
  		return result;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
422
  	}
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
423

b1a3459b0   Mauro Carvalho Chehab   Documentation/Cod...
424
  A common type of bug to be aware of is ``one err bugs`` which look like this:
ea0403603   Dan Carpenter   CodingStyle: add ...
425

d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
426
  .. code-block:: c
79c70c304   Jonathan Corbet   docs: Remove spac...
427
  	err:
09677e0ff   Pavel Kretov   Documentation/Cod...
428
429
430
  		kfree(foo->bar);
  		kfree(foo);
  		return ret;
ea0403603   Dan Carpenter   CodingStyle: add ...
431

b1a3459b0   Mauro Carvalho Chehab   Documentation/Cod...
432
433
434
  The bug in this code is that on some exit paths ``foo`` is NULL.  Normally the
  fix for this is to split it up into two error labels ``err_free_bar:`` and
  ``err_free_foo:``:
865a1caa4   Jean Delvare   CodingStyle: Clar...
435

d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
436
  .. code-block:: c
865a1caa4   Jean Delvare   CodingStyle: Clar...
437
438
439
440
441
442
443
  	 err_free_bar:
  		kfree(foo->bar);
  	 err_free_foo:
  		kfree(foo);
  		return ret;
  
  Ideally you should simulate errors to test all exit paths.
ea0403603   Dan Carpenter   CodingStyle: add ...
444

d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
445
446
  8) Commenting
  -------------
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
447
448
449
  
  Comments are good, but there is also a danger of over-commenting.  NEVER
  try to explain HOW your code works in a comment: it's much better to
5d628b452   Mauro Carvalho Chehab   Documentation/Cod...
450
  write the code so that the **working** is obvious, and it's a waste of
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
451
452
453
454
455
  time to explain badly written code.
  
  Generally, you want your comments to tell WHAT your code does, not HOW.
  Also, try to avoid putting comments inside a function body: if the
  function is so complex that you need to separately comment parts of it,
b3fc9941f   Randy Dunlap   [PATCH] CodingSty...
456
  you should probably go back to chapter 6 for a while.  You can make
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
457
458
459
460
  small comments to note or warn about something particularly clever (or
  ugly), but try to avoid excess.  Instead, put the comments at the head
  of the function, telling people what it does, and possibly WHY it does
  it.
b3fc9941f   Randy Dunlap   [PATCH] CodingSty...
461
  When commenting the kernel API functions, please use the kernel-doc format.
8ed292fe8   Jonathan Corbet   docs: deprecate k...
462
  See the files Documentation/kernel-documentation.rst and scripts/kernel-doc
e776eba0f   Pekka J Enberg   [PATCH] Add kerne...
463
  for details.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
464

b3fc9941f   Randy Dunlap   [PATCH] CodingSty...
465
  The preferred style for long (multi-line) comments is:
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
466
  .. code-block:: c
b3fc9941f   Randy Dunlap   [PATCH] CodingSty...
467
468
469
470
471
472
473
474
  	/*
  	 * This is the preferred style for multi-line
  	 * comments in the Linux kernel source code.
  	 * Please use it consistently.
  	 *
  	 * Description:  A column of asterisks on the left side,
  	 * with beginning and ending almost-blank lines.
  	 */
c4ff1b5f8   Joe Perches   CodingStyle: add ...
475
476
  For files in net/ and drivers/net/ the preferred style for long (multi-line)
  comments is a little different.
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
477
  .. code-block:: c
c4ff1b5f8   Joe Perches   CodingStyle: add ...
478
479
480
481
482
483
  	/* The preferred comment style for files in net/ and drivers/net
  	 * looks like this.
  	 *
  	 * It is nearly the same as the generally preferred comment style,
  	 * but there is no initial almost-blank line.
  	 */
b3fc9941f   Randy Dunlap   [PATCH] CodingSty...
484
485
486
487
  It's also important to comment data, whether they are basic types or derived
  types.  To this end, use just one data declaration per line (no commas for
  multiple data declarations).  This leaves you room for a small comment on each
  item, explaining its use.
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
488
489
  9) You've made a mess of it
  ---------------------------
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
490
491
  
  That's OK, we all do.  You've probably been told by your long-time Unix
b1a3459b0   Mauro Carvalho Chehab   Documentation/Cod...
492
  user helper that ``GNU emacs`` automatically formats the C sources for
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
493
494
495
496
497
498
499
  you, and you've noticed that yes, it does do that, but the defaults it
  uses are less than desirable (in fact, they are worse than random
  typing - an infinite number of monkeys typing into GNU emacs would never
  make a good program).
  
  So, you can either get rid of GNU emacs, or change it to use saner
  values.  To do the latter, you can stick the following in your .emacs file:
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
  .. code-block:: none
  
    (defun c-lineup-arglist-tabs-only (ignored)
      "Line up argument lists by tabs, not spaces"
      (let* ((anchor (c-langelem-pos c-syntactic-element))
             (column (c-langelem-2nd-pos c-syntactic-element))
             (offset (- (1+ column) anchor))
             (steps (floor offset c-basic-offset)))
        (* (max steps 1)
           c-basic-offset)))
  
    (add-hook 'c-mode-common-hook
              (lambda ()
                ;; Add kernel style
                (c-add-style
                 "linux-tabs-only"
                 '("linux" (c-offsets-alist
                            (arglist-cont-nonempty
                             c-lineup-gcc-asm-reg
                             c-lineup-arglist-tabs-only))))))
  
    (add-hook 'c-mode-hook
              (lambda ()
                (let ((filename (buffer-file-name)))
                  ;; Enable kernel mode for the appropriate files
                  (when (and filename
                             (string-match (expand-file-name "~/src/linux-trees")
                                           filename))
                    (setq indent-tabs-mode t)
                    (setq show-trailing-whitespace t)
                    (c-set-style "linux-tabs-only")))))
a7f371e54   Johannes Weiner   documentation: up...
531
532
  
  This will make emacs go better with the kernel coding style for C
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
533
  files below ``~/src/linux-trees``.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
534
535
  
  But even if you fail in getting emacs to do sane formatting, not
b1a3459b0   Mauro Carvalho Chehab   Documentation/Cod...
536
  everything is lost: use ``indent``.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
537
538
539
540
541
542
  
  Now, again, GNU indent has the same brain-dead settings that GNU emacs
  has, which is why you need to give it a few command line options.
  However, that's not too bad, because even the makers of GNU indent
  recognize the authority of K&R (the GNU people aren't evil, they are
  just severely misguided in this matter), so you just give indent the
b1a3459b0   Mauro Carvalho Chehab   Documentation/Cod...
543
544
  options ``-kr -i8`` (stands for ``K&R, 8 character indents``), or use
  ``scripts/Lindent``, which indents in the latest style.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
545

b1a3459b0   Mauro Carvalho Chehab   Documentation/Cod...
546
  ``indent`` has a lot of options, and especially when it comes to comment
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
547
  re-formatting you may want to take a look at the man page.  But
b1a3459b0   Mauro Carvalho Chehab   Documentation/Cod...
548
  remember: ``indent`` is not a fix for bad programming.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
549

d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
550
551
  10) Kconfig configuration files
  -------------------------------
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
552

6754bb4de   Robert P. J. Day   Documentation: fi...
553
  For all of the Kconfig* configuration files throughout the source tree,
b1a3459b0   Mauro Carvalho Chehab   Documentation/Cod...
554
  the indentation is somewhat different.  Lines under a ``config`` definition
6754bb4de   Robert P. J. Day   Documentation: fi...
555
  are indented with one tab, while help text is indented an additional two
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
556
  spaces.  Example::
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
557

d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
558
    config AUDIT
6754bb4de   Robert P. J. Day   Documentation: fi...
559
560
  	bool "Auditing support"
  	depends on NET
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
561
  	help
6754bb4de   Robert P. J. Day   Documentation: fi...
562
563
564
565
  	  Enable auditing infrastructure that can be used with another
  	  kernel subsystem, such as SELinux (which requires this for
  	  logging of avc messages output).  Does not do system-call
  	  auditing without CONFIG_AUDITSYSCALL.
0335cb469   Kees Cook   Documentation: re...
566
  Seriously dangerous features (such as write support for certain
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
567
  filesystems) should advertise this prominently in their prompt string::
6754bb4de   Robert P. J. Day   Documentation: fi...
568

d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
569
    config ADFS_FS_RW
6754bb4de   Robert P. J. Day   Documentation: fi...
570
571
572
  	bool "ADFS write support (DANGEROUS)"
  	depends on ADFS_FS
  	...
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
573

6754bb4de   Robert P. J. Day   Documentation: fi...
574
575
  For full documentation on the configuration files, see the file
  Documentation/kbuild/kconfig-language.txt.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
576

d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
577
578
  11) Data structures
  -------------------
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
579
580
581
582
583
  
  Data structures that have visibility outside the single-threaded
  environment they are created and destroyed in should always have
  reference counts.  In the kernel, garbage collection doesn't exist (and
  outside the kernel garbage collection is slow and inefficient), which
5d628b452   Mauro Carvalho Chehab   Documentation/Cod...
584
  means that you absolutely **have** to reference count all your uses.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
585
586
587
588
589
  
  Reference counting means that you can avoid locking, and allows multiple
  users to have access to the data structure in parallel - and not having
  to worry about the structure suddenly going away from under them just
  because they slept or did something else for a while.
5d628b452   Mauro Carvalho Chehab   Documentation/Cod...
590
  Note that locking is **not** a replacement for reference counting.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
591
592
593
594
595
  Locking is used to keep data structures coherent, while reference
  counting is a memory management technique.  Usually both are needed, and
  they are not to be confused with each other.
  
  Many data structures can indeed have two levels of reference counting,
b1a3459b0   Mauro Carvalho Chehab   Documentation/Cod...
596
  when there are users of different ``classes``.  The subclass count counts
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
597
598
  the number of subclass users, and decrements the global count just once
  when the subclass count goes to zero.
b1a3459b0   Mauro Carvalho Chehab   Documentation/Cod...
599
600
601
  Examples of this kind of ``multi-level-reference-counting`` can be found in
  memory management (``struct mm_struct``: mm_users and mm_count), and in
  filesystem code (``struct super_block``: s_count and s_active).
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
602
603
604
  
  Remember: if another thread can find your data structure, and you don't
  have a reference count on it, you almost certainly have a bug.
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
605
606
  12) Macros, Enums and RTL
  -------------------------
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
607
608
  
  Names of macros defining constants and labels in enums are capitalized.
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
609
  .. code-block:: c
09677e0ff   Pavel Kretov   Documentation/Cod...
610
  	#define CONSTANT 0x12345
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
611
612
613
614
615
616
617
618
619
  
  Enums are preferred when defining several related constants.
  
  CAPITALIZED macro names are appreciated but macros resembling functions
  may be named in lower case.
  
  Generally, inline functions are preferable to macros resembling functions.
  
  Macros with multiple statements should be enclosed in a do - while block:
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
620
621
622
  .. code-block:: c
  
  	#define macrofun(a, b, c)			\
09677e0ff   Pavel Kretov   Documentation/Cod...
623
624
625
626
  		do {					\
  			if (a == 5)			\
  				do_this(b, c);		\
  		} while (0)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
627
628
629
630
  
  Things to avoid when using macros:
  
  1) macros that affect control flow:
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
631
  .. code-block:: c
09677e0ff   Pavel Kretov   Documentation/Cod...
632
633
634
635
  	#define FOO(x)					\
  		do {					\
  			if (blah(x) < 0)		\
  				return -EBUGGERED;	\
32fd52d56   Thomas Gardner   Documentation/Cod...
636
  		} while (0)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
637

5d628b452   Mauro Carvalho Chehab   Documentation/Cod...
638
  is a **very** bad idea.  It looks like a function call but exits the ``calling``
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
639
640
641
  function; don't break the internal parsers of those who will read the code.
  
  2) macros that depend on having a local variable with a magic name:
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
642
  .. code-block:: c
09677e0ff   Pavel Kretov   Documentation/Cod...
643
  	#define FOO(val) bar(index, val)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
644
645
646
647
648
649
650
651
652
653
  
  might look like a good thing, but it's confusing as hell when one reads the
  code and it's prone to breakage from seemingly innocent changes.
  
  3) macros with arguments that are used as l-values: FOO(x) = y; will
  bite you if somebody e.g. turns FOO into an inline function.
  
  4) forgetting about precedence: macros defining constants using expressions
  must enclose the expression in parentheses. Beware of similar issues with
  macros using parameters.
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
654
  .. code-block:: c
09677e0ff   Pavel Kretov   Documentation/Cod...
655
656
  	#define CONSTANT 0x4000
  	#define CONSTEXP (CONSTANT | 3)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
657

f2027543b   Bartosz Golaszewski   documentation: up...
658
659
  5) namespace collisions when defining local variables in macros resembling
  functions:
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
660
661
662
663
664
665
666
667
  .. code-block:: c
  
  	#define FOO(x)				\
  	({					\
  		typeof(x) ret;			\
  		ret = calc_ret(x);		\
  		(ret);				\
  	})
f2027543b   Bartosz Golaszewski   documentation: up...
668
669
670
  
  ret is a common name for a local variable - __foo_ret is less likely
  to collide with an existing variable.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
671
672
  The cpp manual deals with macros exhaustively. The gcc internals manual also
  covers RTL which is used frequently with assembly language in the kernel.
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
673
674
  13) Printing kernel messages
  ----------------------------
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
675
676
677
  
  Kernel developers like to be seen as literate. Do mind the spelling
  of kernel messages to make a good impression. Do not use crippled
b1a3459b0   Mauro Carvalho Chehab   Documentation/Cod...
678
  words like ``dont``; use ``do not`` or ``don't`` instead.  Make the messages
6b09448ab   David Brownell   dev_vdbg() docume...
679
  concise, clear, and unambiguous.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
680
681
682
683
  
  Kernel messages do not have to be terminated with a period.
  
  Printing numbers in parentheses (%d) adds no value and should be avoided.
6b09448ab   David Brownell   dev_vdbg() docume...
684
685
686
687
  There are a number of driver model diagnostic macros in <linux/device.h>
  which you should use to make sure messages are matched to the right device
  and driver, and are tagged with the right level:  dev_err(), dev_warn(),
  dev_info(), and so forth.  For messages that aren't associated with a
6e099f557   Dan Streetman   Documentation: ex...
688
689
  particular device, <linux/printk.h> defines pr_notice(), pr_info(),
  pr_warn(), pr_err(), etc.
6b09448ab   David Brownell   dev_vdbg() docume...
690
691
  
  Coming up with good debugging messages can be quite a challenge; and once
6e099f557   Dan Streetman   Documentation: ex...
692
693
694
695
696
697
698
699
700
701
702
  you have them, they can be a huge help for remote troubleshooting.  However
  debug message printing is handled differently than printing other non-debug
  messages.  While the other pr_XXX() functions print unconditionally,
  pr_debug() does not; it is compiled out by default, unless either DEBUG is
  defined or CONFIG_DYNAMIC_DEBUG is set.  That is true for dev_dbg() also,
  and a related convention uses VERBOSE_DEBUG to add dev_vdbg() messages to
  the ones already enabled by DEBUG.
  
  Many subsystems have Kconfig debug options to turn on -DDEBUG in the
  corresponding Makefile; in other cases specific files #define DEBUG.  And
  when a debug message should be unconditionally printed, such as if it is
7c18fd786   Raymond L. Rivera   CodingStyle: fix ...
703
  already inside a debug-related #ifdef section, printk(KERN_DEBUG ...) can be
6e099f557   Dan Streetman   Documentation: ex...
704
  used.
6b09448ab   David Brownell   dev_vdbg() docume...
705

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
706

d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
707
708
  14) Allocating memory
  ---------------------
af4e5a218   Pekka J Enberg   [PATCH] CodingSty...
709
710
  
  The kernel provides the following general purpose memory allocators:
15837294d   Xi Wang   CodingStyle: add ...
711
712
713
  kmalloc(), kzalloc(), kmalloc_array(), kcalloc(), vmalloc(), and
  vzalloc().  Please refer to the API documentation for further information
  about them.
af4e5a218   Pekka J Enberg   [PATCH] CodingSty...
714
715
  
  The preferred form for passing a size of a struct is the following:
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
716
  .. code-block:: c
af4e5a218   Pekka J Enberg   [PATCH] CodingSty...
717
718
719
720
721
722
723
724
725
  	p = kmalloc(sizeof(*p), ...);
  
  The alternative form where struct name is spelled out hurts readability and
  introduces an opportunity for a bug when the pointer variable type is changed
  but the corresponding sizeof that is passed to a memory allocator is not.
  
  Casting the return value which is a void pointer is redundant. The conversion
  from void pointer to any other pointer type is guaranteed by the C programming
  language.
15837294d   Xi Wang   CodingStyle: add ...
726
  The preferred form for allocating an array is the following:
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
727
  .. code-block:: c
15837294d   Xi Wang   CodingStyle: add ...
728
729
730
  	p = kmalloc_array(n, sizeof(...), ...);
  
  The preferred form for allocating a zeroed array is the following:
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
731
  .. code-block:: c
15837294d   Xi Wang   CodingStyle: add ...
732
733
734
735
  	p = kcalloc(n, sizeof(...), ...);
  
  Both forms check for overflow on the allocation size n * sizeof(...),
  and return NULL if that occurred.
af4e5a218   Pekka J Enberg   [PATCH] CodingSty...
736

d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
737
738
  15) The inline disease
  ----------------------
a771f2b82   Arjan van de Ven   [PATCH] Add a sec...
739
740
  
  There appears to be a common misperception that gcc has a magic "make me
b1a3459b0   Mauro Carvalho Chehab   Documentation/Cod...
741
  faster" speedup option called ``inline``. While the use of inlines can be
53ab97a1c   Jesper Juhl   Fix chapter refer...
742
  appropriate (for example as a means of replacing macros, see Chapter 12), it
a771f2b82   Arjan van de Ven   [PATCH] Add a sec...
743
744
745
746
  very often is not. Abundant use of the inline keyword leads to a much bigger
  kernel, which in turn slows the system as a whole down, due to a bigger
  icache footprint for the CPU and simply because there is less memory
  available for the pagecache. Just think about it; a pagecache miss causes a
19af5cdb7   Martin Olsson   trivial: fix typo...
747
748
  disk seek, which easily takes 5 milliseconds. There are a LOT of cpu cycles
  that can go into these 5 milliseconds.
a771f2b82   Arjan van de Ven   [PATCH] Add a sec...
749
750
751
752
753
754
755
756
757
758
759
760
761
762
  
  A reasonable rule of thumb is to not put inline at functions that have more
  than 3 lines of code in them. An exception to this rule are the cases where
  a parameter is known to be a compiletime constant, and as a result of this
  constantness you *know* the compiler will be able to optimize most of your
  function away at compile time. For a good example of this later case, see
  the kmalloc() inline function.
  
  Often people argue that adding inline to functions that are static and used
  only once is always a win since there is no space tradeoff. While this is
  technically correct, gcc is capable of inlining these automatically without
  help, and the maintenance issue of removing the inline when a second user
  appears outweighs the potential value of the hint that tells gcc to do
  something it would have done anyway.
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
763
764
  16) Function return values and names
  ------------------------------------
c16a02d6f   Alan Stern   [PATCH] Add secti...
765
766
767
768
  
  Functions can return values of many different kinds, and one of the
  most common is a value indicating whether the function succeeded or
  failed.  Such a value can be represented as an error-code integer
b1a3459b0   Mauro Carvalho Chehab   Documentation/Cod...
769
  (-Exxx = failure, 0 = success) or a ``succeeded`` boolean (0 = failure,
c16a02d6f   Alan Stern   [PATCH] Add secti...
770
771
772
773
774
775
  non-zero = success).
  
  Mixing up these two sorts of representations is a fertile source of
  difficult-to-find bugs.  If the C language included a strong distinction
  between integers and booleans then the compiler would find these mistakes
  for us... but it doesn't.  To help prevent such bugs, always follow this
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
776
  convention::
c16a02d6f   Alan Stern   [PATCH] Add secti...
777
778
779
780
  
  	If the name of a function is an action or an imperative command,
  	the function should return an error-code integer.  If the name
  	is a predicate, the function should return a "succeeded" boolean.
b1a3459b0   Mauro Carvalho Chehab   Documentation/Cod...
781
782
  For example, ``add work`` is a command, and the add_work() function returns 0
  for success or -EBUSY for failure.  In the same way, ``PCI device present`` is
c16a02d6f   Alan Stern   [PATCH] Add secti...
783
784
785
786
787
788
789
790
791
792
793
794
  a predicate, and the pci_dev_present() function returns 1 if it succeeds in
  finding a matching device or 0 if it doesn't.
  
  All EXPORTed functions must respect this convention, and so should all
  public functions.  Private (static) functions need not, but it is
  recommended that they do.
  
  Functions whose return value is the actual result of a computation, rather
  than an indication of whether the computation succeeded, are not subject to
  this rule.  Generally they indicate failure by returning some out-of-range
  result.  Typical examples would be functions that return pointers; they use
  NULL or the ERR_PTR mechanism to report failure.
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
795
796
  17) Don't re-invent the kernel macros
  -------------------------------------
58637ec90   Robert P. J. Day   [PATCH] Add a new...
797
798
799
800
801
  
  The header file include/linux/kernel.h contains a number of macros that
  you should use, rather than explicitly coding some variant of them yourself.
  For example, if you need to calculate the length of an array, take advantage
  of the macro
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
802
  .. code-block:: c
09677e0ff   Pavel Kretov   Documentation/Cod...
803
  	#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
58637ec90   Robert P. J. Day   [PATCH] Add a new...
804
805
  
  Similarly, if you need to calculate the size of some structure member, use
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
806
  .. code-block:: c
09677e0ff   Pavel Kretov   Documentation/Cod...
807
  	#define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f))
58637ec90   Robert P. J. Day   [PATCH] Add a new...
808
809
810
811
  
  There are also min() and max() macros that do strict type checking if you
  need them.  Feel free to peruse that header file to see what else is already
  defined that you shouldn't reproduce in your code.
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
812
813
  18) Editor modelines and other cruft
  ------------------------------------
4e7bd6631   Josh Triplett   CodingStyle: add ...
814
815
816
817
  
  Some editors can interpret configuration information embedded in source files,
  indicated with special markers.  For example, emacs interprets lines marked
  like this:
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
818
  .. code-block:: c
09677e0ff   Pavel Kretov   Documentation/Cod...
819
  	-*- mode: c -*-
4e7bd6631   Josh Triplett   CodingStyle: add ...
820
821
  
  Or like this:
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
822
  .. code-block:: c
09677e0ff   Pavel Kretov   Documentation/Cod...
823
824
825
826
827
  	/*
  	Local Variables:
  	compile-command: "gcc -DMAGIC_DEBUG_FLAG foo.c"
  	End:
  	*/
4e7bd6631   Josh Triplett   CodingStyle: add ...
828
829
  
  Vim interprets markers that look like this:
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
830
  .. code-block:: c
09677e0ff   Pavel Kretov   Documentation/Cod...
831
  	/* vim:set sw=8 noet */
4e7bd6631   Josh Triplett   CodingStyle: add ...
832
833
834
835
836
837
  
  Do not include any of these in source files.  People have their own personal
  editor configurations, and your source files should not override them.  This
  includes markers for indentation and mode configuration.  People may use their
  own custom mode, or may have some other magic method for making indentation
  work correctly.
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
838
839
  19) Inline assembly
  -------------------
9a7c48b7c   Josh Triplett   Documentation: Co...
840
841
842
843
844
845
846
847
848
849
850
851
  
  In architecture-specific code, you may need to use inline assembly to interface
  with CPU or platform functionality.  Don't hesitate to do so when necessary.
  However, don't use inline assembly gratuitously when C can do the job.  You can
  and should poke hardware from C when possible.
  
  Consider writing simple helper functions that wrap common bits of inline
  assembly, rather than repeatedly writing them with slight variations.  Remember
  that inline assembly can use C parameters.
  
  Large, non-trivial assembly functions should go in .S files, with corresponding
  C prototypes defined in C header files.  The C prototypes for assembly
b1a3459b0   Mauro Carvalho Chehab   Documentation/Cod...
852
  functions should use ``asmlinkage``.
9a7c48b7c   Josh Triplett   Documentation: Co...
853
854
855
856
857
858
859
860
861
862
  
  You may need to mark your asm statement as volatile, to prevent GCC from
  removing it if GCC doesn't notice any side effects.  You don't always need to
  do so, though, and doing so unnecessarily can limit optimization.
  
  When writing a single inline assembly statement containing multiple
  instructions, put each instruction on a separate line in a separate quoted
  string, and end each string except the last with 
  \t to properly indent the
  next instruction in the assembly output:
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
863
  .. code-block:: c
9a7c48b7c   Josh Triplett   Documentation: Co...
864
865
866
867
  	asm ("magic %reg1, #42
  \t"
  	     "more_magic %reg2, %reg3"
  	     : /* outputs */ : /* inputs */ : /* clobbers */);
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
868
869
  20) Conditional Compilation
  ---------------------------
21228a186   Josh Triplett   CodingStyle: Add ...
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
  
  Wherever possible, don't use preprocessor conditionals (#if, #ifdef) in .c
  files; doing so makes code harder to read and logic harder to follow.  Instead,
  use such conditionals in a header file defining functions for use in those .c
  files, providing no-op stub versions in the #else case, and then call those
  functions unconditionally from .c files.  The compiler will avoid generating
  any code for the stub calls, producing identical results, but the logic will
  remain easy to follow.
  
  Prefer to compile out entire functions, rather than portions of functions or
  portions of expressions.  Rather than putting an ifdef in an expression, factor
  out part or all of the expression into a separate helper function and apply the
  conditional to that function.
  
  If you have a function or variable which may potentially go unused in a
  particular configuration, and the compiler would warn about its definition
  going unused, mark the definition as __maybe_unused rather than wrapping it in
  a preprocessor conditional.  (However, if a function or variable *always* goes
  unused, delete it.)
  
  Within code, where possible, use the IS_ENABLED macro to convert a Kconfig
  symbol into a C boolean expression, and use it in a normal C conditional:
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
892
  .. code-block:: c
21228a186   Josh Triplett   CodingStyle: Add ...
893
894
895
896
897
898
899
900
901
902
903
904
905
906
  	if (IS_ENABLED(CONFIG_SOMETHING)) {
  		...
  	}
  
  The compiler will constant-fold the conditional away, and include or exclude
  the block of code just as with an #ifdef, so this will not add any runtime
  overhead.  However, this approach still allows the C compiler to see the code
  inside the block, and check it for correctness (syntax, types, symbol
  references, etc).  Thus, you still have to use an #ifdef if the code inside the
  block references symbols that will not exist if the condition is not met.
  
  At the end of any non-trivial #if or #ifdef block (more than a few lines),
  place a comment after the #endif on the same line, noting the conditional
  expression used.  For instance:
d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
907
  .. code-block:: c
09677e0ff   Pavel Kretov   Documentation/Cod...
908
909
910
  	#ifdef CONFIG_SOMETHING
  	...
  	#endif /* CONFIG_SOMETHING */
21228a186   Josh Triplett   CodingStyle: Add ...
911

a771f2b82   Arjan van de Ven   [PATCH] Add a sec...
912

d8dbbbc54   Mauro Carvalho Chehab   Documentation/Cod...
913
914
  Appendix I) References
  ----------------------
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
915
916
917
918
919
  
  The C Programming Language, Second Edition
  by Brian W. Kernighan and Dennis M. Ritchie.
  Prentice Hall, Inc., 1988.
  ISBN 0-13-110362-8 (paperback), 0-13-110370-9 (hardback).
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
920
921
922
923
924
  
  The Practice of Programming
  by Brian W. Kernighan and Rob Pike.
  Addison-Wesley, Inc., 1999.
  ISBN 0-201-61586-X.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
925
926
  
  GNU manuals - where in compliance with K&R and this text - for cpp, gcc,
5b0ed2c64   Xose Vazquez Perez   [PATCH] docs: upd...
927
  gcc internals and indent, all available from http://www.gnu.org/manual/
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
928
929
  
  WG14 is the international standardization working group for the programming
5b0ed2c64   Xose Vazquez Perez   [PATCH] docs: upd...
930
931
932
933
  language C, URL: http://www.open-std.org/JTC1/SC22/WG14/
  
  Kernel CodingStyle, by greg@kroah.com at OLS 2002:
  http://www.kroah.com/linux/talks/ols_2002_kernel_codingstyle_talk/html/