Hi Paul, [auto build test ERROR on next-20151016 -- if it's inappropriate base, please suggest rules for selecting the more suitable base] url: https://github.com/0day-ci/linux/commits/Paul-Osmialowski/Additional-kmsg-devices/20151019-211509 config: x86_64-allnoconfig (attached as .config) reproduce: # save the attached .config to linux build tree make ARCH=x86_64 All error/warnings (new ones prefixed by >>): In file included from kernel/printk/printk.c:50:0: >> kernel/printk/printk.h:195:1: error: expected identifier or '(' before '{' token { ^ >> kernel/printk/printk.c:1541:0: warning: "LOG_LINE_MAX" redefined #define LOG_LINE_MAX 0 ^ In file included from kernel/printk/printk.c:50:0: kernel/printk/printk.h:10:0: note: this is the location of the previous definition #define LOG_LINE_MAX (1024 - PREFIX_MAX) ^ >> kernel/printk/printk.c:1542:0: warning: "PREFIX_MAX" redefined #define PREFIX_MAX 0 ^ In file included from kernel/printk/printk.c:50:0: kernel/printk/printk.h:9:0: note: this is the location of the previous definition #define PREFIX_MAX 32 ^ >> kernel/printk/printk.h:192:22: warning: 'msg_print_text' used but never defined static inline size_t msg_print_text(const struct printk_log *msg, ^ vim +195 kernel/printk/printk.h 3 4 #include <linux/printk.h> 5 #include <linux/spinlock_types.h> 6 #include <linux/types.h> 7 #include <linux/wait.h> 8 > 9 #define PREFIX_MAX 32 10 #define LOG_LINE_MAX (1024 - PREFIX_MAX) 11 12 /* 13 * The printk log buffer consists of a chain of concatenated variable 14 * length records. Every record starts with a record header, containing 15 * the overall length of the record. 16 * 17 * The heads to the first and last entry in the buffer, as well as the 18 * sequence numbers of these entries are maintained when messages are 19 * stored. 20 * 21 * If the heads indicate available messages, the length in the header 22 * tells the start next message. A length == 0 for the next message 23 * indicates a wrap-around to the beginning of the buffer. 24 * 25 * Every record carries the monotonic timestamp in microseconds, as well as 26 * the standard userspace syslog level and syslog facility. The usual 27 * kernel messages use LOG_KERN; userspace-injected messages always carry 28 * a matching syslog facility, by default LOG_USER. The origin of every 29 * message can be reliably determined that way. 30 * 31 * The human readable log message directly follows the message header. The 32 * length of the message text is stored in the header, the stored message 33 * is not terminated. 34 * 35 * Optionally, a message can carry a dictionary of properties (key/value pairs), 36 * to provide userspace with a machine-readable message context. 37 * 38 * Examples for well-defined, commonly used property names are: 39 * DEVICE=b12:8 device identifier 40 * b12:8 block dev_t 41 * c127:3 char dev_t 42 * n8 netdev ifindex 43 * +sound:card0 subsystem:devname 44 * SUBSYSTEM=pci driver-core subsystem name 45 * 46 * Valid characters in property names are [a-zA-Z0-9.-_]. The plain text value 47 * follows directly after a '=' character. Every property is terminated by 48 * a '\0' character. The last property is not terminated. 49 * 50 * Example of a message structure: 51 * 0000 ff 8f 00 00 00 00 00 00 monotonic time in nsec 52 * 0008 34 00 record is 52 bytes long 53 * 000a 0b 00 text is 11 bytes long 54 * 000c 1f 00 dictionary is 23 bytes long 55 * 000e 03 00 LOG_KERN (facility) LOG_ERR (level) 56 * 0010 69 74 27 73 20 61 20 6c "it's a l" 57 * 69 6e 65 "ine" 58 * 001b 44 45 56 49 43 "DEVIC" 59 * 45 3d 62 38 3a 32 00 44 "E=b8:2\0D" 60 * 52 49 56 45 52 3d 62 75 "RIVER=bu" 61 * 67 "g" 62 * 0032 00 00 00 padding to next message header 63 * 64 * The 'struct printk_log' buffer header must never be directly exported to 65 * userspace, it is a kernel-private implementation detail that might 66 * need to be changed in the future, when the requirements change. 67 * 68 * /dev/kmsg exports the structured data in the following line format: 69 * "<level>,<sequnum>,<tstamp>,<contflag>[,additional_vals, ... ];<msg txt>\n" 70 * 71 * Users of the export format should ignore possible additional values 72 * separated by ',', and find the message after the ';' character. 73 * 74 * The optional key/value pairs are attached as continuation lines starting 75 * with a space character and terminated by a newline. All possible 76 * non-prinatable characters are escaped in the "\xff" notation. 77 */ 78 79 enum log_flags { 80 LOG_NOCONS = 1, /* already flushed, do not print to console */ 81 LOG_NEWLINE = 2, /* text ended with a newline */ 82 LOG_PREFIX = 4, /* text started with a prefix */ 83 LOG_CONT = 8, /* text is a fragment of a continuation line */ 84 }; 85 86 struct printk_log { 87 u64 ts_nsec; /* timestamp in nanoseconds */ 88 u16 len; /* length of entire record */ 89 u16 text_len; /* length of text buffer */ 90 u16 dict_len; /* length of dictionary buffer */ 91 u8 facility; /* syslog facility */ 92 u8 flags:5; /* internal record flags */ 93 u8 level:3; /* syslog level */ 94 }; 95 96 /* 97 * The logbuf_lock protects kmsg buffer, indices, counters. This can be taken 98 * within the scheduler's rq lock. It must be released before calling 99 * console_unlock() or anything else that might wake up a process. 100 */ 101 extern raw_spinlock_t logbuf_lock; 102 103 #ifdef CONFIG_PRINTK 104 105 extern wait_queue_head_t log_wait; 106 107 /* index and sequence number of the first record stored in the buffer */ 108 extern u64 log_first_seq; 109 extern u32 log_first_idx; 110 111 /* index and sequence number of the next record to store in the buffer */ 112 extern u64 log_next_seq; 113 extern u32 log_next_idx; 114 115 /* the next printk record to read after the last 'clear' command */ 116 extern u64 clear_seq; 117 extern u32 clear_idx; 118 119 ssize_t msg_print_ext_header(char *buf, size_t size, 120 struct printk_log *msg, u64 seq, 121 enum log_flags prev_flags); 122 123 ssize_t msg_print_ext_body(char *buf, size_t size, 124 char *dict, size_t dict_len, 125 char *text, size_t text_len); 126 127 size_t msg_print_text(const struct printk_log *msg, enum log_flags prev, 128 bool syslog, char *buf, size_t size); 129 130 /* get next record; idx must point to valid msg */ 131 static inline u32 log_next(u32 idx) 132 { 133 char *log_buf = log_buf_addr_get(); 134 struct printk_log *msg = (struct printk_log *)(log_buf + idx); 135 136 /* length == 0 indicates the end of the buffer; wrap */ 137 /* 138 * A length == 0 record is the end of buffer marker. Wrap around and 139 * read the message at the start of the buffer as *this* one, and 140 * return the one after that. 141 */ 142 if (!msg->len) { 143 msg = (struct printk_log *)log_buf; 144 return msg->len; 145 } 146 return idx + msg->len; 147 } 148 149 /* get record by index; idx must point to valid msg */ 150 static inline struct printk_log *log_from_idx(u32 idx) 151 { 152 char *log_buf = log_buf_addr_get(); 153 struct printk_log *msg = (struct printk_log *)(log_buf + idx); 154 155 /* 156 * A length == 0 record is the end of buffer marker. Wrap around and 157 * read the message at the start of the buffer. 158 */ 159 if (!msg->len) 160 return (struct printk_log *)log_buf; 161 return msg; 162 } 163 164 /* human readable text of the record */ 165 static inline char *log_text(const struct printk_log *msg) 166 { 167 return (char *)msg + sizeof(struct printk_log); 168 } 169 170 /* optional key/value pair dictionary attached to the record */ 171 static inline char *log_dict(const struct printk_log *msg) 172 { 173 return (char *)msg + sizeof(struct printk_log) + msg->text_len; 174 } 175 176 #else 177 178 static inline ssize_t msg_print_ext_header(char *buf, size_t size, 179 struct printk_log *msg, u64 seq, 180 enum log_flags prev_flags) 181 { 182 return 0; 183 } 184 185 static inline ssize_t msg_print_ext_body(char *buf, size_t size, 186 char *dict, size_t dict_len, 187 char *text, size_t text_len) 188 { 189 return 0; 190 } 191 > 192 static inline size_t msg_print_text(const struct printk_log *msg, 193 enum log_flags prev, bool syslog, char *buf, 194 size_t size); > 195 { 196 return 0; 197 } 198 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
Attachment:
.config.gz
Description: Binary data