From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751452AbcGOS12 (ORCPT ); Fri, 15 Jul 2016 14:27:28 -0400 Received: from mga01.intel.com ([192.55.52.88]:41790 "EHLO mga01.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751305AbcGOS1Y (ORCPT ); Fri, 15 Jul 2016 14:27:24 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.28,369,1464678000"; d="gz'50?scan'50,208,50";a="996078027" Date: Sat, 16 Jul 2016 02:31:41 +0800 From: kbuild test robot To: Petr Mladek Cc: kbuild-all@01.org, Andrew Morton , Sergey Senozhatsky , Jiri Kosina , Jan Kara , Tejun Heo , Tetsuo Handa , Byungchul Park , linux-kernel@vger.kernel.org, Petr Mladek Subject: Re: [PATCH POC 2/4] printk: Do not block cont buffer by partially flushed lines Message-ID: <201607160238.o5o2bFyU%fengguang.wu@intel.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="yrj/dFKFPuw6o+aM" Content-Disposition: inline In-Reply-To: <1468601942-18482-3-git-send-email-pmladek@suse.com> User-Agent: Mutt/1.5.23 (2014-03-12) X-SA-Exim-Connect-IP: X-SA-Exim-Mail-From: fengguang.wu@intel.com X-SA-Exim-Scanned: No (on bee); SAEximRunCond expanded to false Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --yrj/dFKFPuw6o+aM Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hi, [auto build test ERROR on v4.7-rc7] [cannot apply to next-20160715] [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/Petr-Mladek/printk-Several-fixes-of-cont-buffer-and-console-handling/20160716-012724 config: i386-tinyconfig (attached as .config) compiler: gcc-6 (Debian 6.1.1-1) 6.1.1 20160430 reproduce: # save the attached .config to linux build tree make ARCH=i386 All error/warnings (new ones prefixed by >>): kernel/printk/printk.c: In function 'console_cont_flush': kernel/printk/printk.c:2150:11: error: 'struct cont' has no member named 'msg' if (!cont.msg->text_len) ^ >> kernel/printk/printk.c:2160:24: error: passing argument 1 of 'cont_print_text' from incompatible pointer type [-Werror=incompatible-pointer-types] len = cont_print_text(&cont, text, size); ^ kernel/printk/printk.c:1873:15: note: expected 'char *' but argument is of type 'struct cont *' static size_t cont_print_text(char *text, size_t size) { return 0; } ^~~~~~~~~~~~~~~ >> kernel/printk/printk.c:2160:31: warning: passing argument 2 of 'cont_print_text' makes integer from pointer without a cast [-Wint-conversion] len = cont_print_text(&cont, text, size); ^~~~ kernel/printk/printk.c:1873:15: note: expected 'size_t {aka unsigned int}' but argument is of type 'char *' static size_t cont_print_text(char *text, size_t size) { return 0; } ^~~~~~~~~~~~~~~ >> kernel/printk/printk.c:2160:8: error: too many arguments to function 'cont_print_text' len = cont_print_text(&cont, text, size); ^~~~~~~~~~~~~~~ kernel/printk/printk.c:1873:15: note: declared here static size_t cont_print_text(char *text, size_t size) { return 0; } ^~~~~~~~~~~~~~~ kernel/printk/printk.c:2163:27: error: 'struct cont' has no member named 'msg' call_console_drivers(cont.msg->level, NULL, 0, text, len); ^ kernel/printk/printk.c: In function 'console_unlock': kernel/printk/printk.c:2262:7: error: 'cont_console_len' undeclared (first use in this function) if (cont_console_len && cont_console_seq == console_seq) { ^~~~~~~~~~~~~~~~ kernel/printk/printk.c:2262:7: note: each undeclared identifier is reported only once for each function it appears in >> kernel/printk/printk.c:2262:27: error: 'cont_console_seq' undeclared (first use in this function) if (cont_console_len && cont_console_seq == console_seq) { ^~~~~~~~~~~~~~~~ >> kernel/printk/printk.c:2265:13: error: 'struct cont' has no member named 'owner' fake_cont.owner = NULL; ^ kernel/printk/printk.c:2266:13: error: 'struct cont' has no member named 'msg' fake_cont.msg = msg; ^ >> kernel/printk/printk.c:2267:13: error: 'struct cont' has no member named 'buf' fake_cont.buf = log_text(msg); ^ kernel/printk/printk.c:2269:27: error: passing argument 1 of 'cont_print_text' from incompatible pointer type [-Werror=incompatible-pointer-types] len += cont_print_text(&fake_cont, text + len, sizeof(text) - len); ^ kernel/printk/printk.c:1873:15: note: expected 'char *' but argument is of type 'struct cont *' static size_t cont_print_text(char *text, size_t size) { return 0; } ^~~~~~~~~~~~~~~ kernel/printk/printk.c:2269:39: warning: passing argument 2 of 'cont_print_text' makes integer from pointer without a cast [-Wint-conversion] len += cont_print_text(&fake_cont, text + len, sizeof(text) - len); ^~~~ kernel/printk/printk.c:1873:15: note: expected 'size_t {aka unsigned int}' but argument is of type 'char *' static size_t cont_print_text(char *text, size_t size) { return 0; } ^~~~~~~~~~~~~~~ kernel/printk/printk.c:2269:11: error: too many arguments to function 'cont_print_text' len += cont_print_text(&fake_cont, text + len, sizeof(text) - len); ^~~~~~~~~~~~~~~ kernel/printk/printk.c:1873:15: note: declared here static size_t cont_print_text(char *text, size_t size) { return 0; } ^~~~~~~~~~~~~~~ cc1: some warnings being treated as errors vim +/cont_print_text +2160 kernel/printk/printk.c 2144 { 2145 unsigned long flags; 2146 size_t len; 2147 2148 raw_spin_lock_irqsave(&logbuf_lock, flags); 2149 > 2150 if (!cont.msg->text_len) 2151 goto out; 2152 2153 /* 2154 * If the partially printed line is already stored in 2155 * the ring buffer, it will be handled with the other lines. 2156 */ 2157 if (console_seq < log_next_seq) 2158 goto out; 2159 > 2160 len = cont_print_text(&cont, text, size); 2161 raw_spin_unlock(&logbuf_lock); 2162 stop_critical_timings(); > 2163 call_console_drivers(cont.msg->level, NULL, 0, text, len); 2164 start_critical_timings(); 2165 local_irq_restore(flags); 2166 return; 2167 out: 2168 raw_spin_unlock_irqrestore(&logbuf_lock, flags); 2169 } 2170 2171 /** 2172 * console_unlock - unlock the console system 2173 * 2174 * Releases the console_lock which the caller holds on the console system 2175 * and the console driver list. 2176 * 2177 * While the console_lock was held, console output may have been buffered 2178 * by printk(). If this is the case, console_unlock(); emits 2179 * the output prior to releasing the lock. 2180 * 2181 * If there is output waiting, we wake /dev/kmsg and syslog() users. 2182 * 2183 * console_unlock(); may be called from any context. 2184 */ 2185 void console_unlock(void) 2186 { 2187 static char ext_text[CONSOLE_EXT_LOG_MAX]; 2188 static char text[LOG_LINE_MAX + PREFIX_MAX]; 2189 static u64 seen_seq; 2190 unsigned long flags; 2191 bool wake_klogd = false; 2192 bool do_cond_resched, retry; 2193 2194 if (console_suspended) { 2195 up_console_sem(); 2196 return; 2197 } 2198 2199 /* 2200 * Console drivers are called under logbuf_lock, so 2201 * @console_may_schedule should be cleared before; however, we may 2202 * end up dumping a lot of lines, for example, if called from 2203 * console registration path, and should invoke cond_resched() 2204 * between lines if allowable. Not doing so can cause a very long 2205 * scheduling stall on a slow console leading to RCU stall and 2206 * softlockup warnings which exacerbate the issue with more 2207 * messages practically incapacitating the system. 2208 */ 2209 do_cond_resched = console_may_schedule; 2210 console_may_schedule = 0; 2211 2212 again: 2213 /* 2214 * We released the console_sem lock, so we need to recheck if 2215 * cpu is online and (if not) is there at least one CON_ANYTIME 2216 * console. 2217 */ 2218 if (!can_use_console()) { 2219 console_locked = 0; 2220 up_console_sem(); 2221 return; 2222 } 2223 2224 /* flush buffered message fragment immediately to console */ 2225 console_cont_flush(text, sizeof(text)); 2226 2227 for (;;) { 2228 struct printk_log *msg; 2229 size_t ext_len = 0; 2230 size_t len; 2231 int level; 2232 2233 raw_spin_lock_irqsave(&logbuf_lock, flags); 2234 if (seen_seq != log_next_seq) { 2235 wake_klogd = true; 2236 seen_seq = log_next_seq; 2237 } 2238 2239 if (console_seq < log_first_seq) { 2240 len = sprintf(text, "** %u printk messages dropped ** ", 2241 (unsigned)(log_first_seq - console_seq)); 2242 2243 /* messages are gone, move to first one */ 2244 console_seq = log_first_seq; 2245 console_idx = log_first_idx; 2246 console_prev = 0; 2247 } else { 2248 len = 0; 2249 } 2250 2251 if (console_seq == log_next_seq) 2252 break; 2253 2254 msg = log_from_idx(console_idx); 2255 level = msg->level; 2256 2257 /* 2258 * The line might be already partially printed from the cont 2259 * buffer. In this case, flush the rest using a fake 2260 * cont buffer. 2261 */ > 2262 if (cont_console_len && cont_console_seq == console_seq) { 2263 struct cont fake_cont; 2264 > 2265 fake_cont.owner = NULL; 2266 fake_cont.msg = msg; > 2267 fake_cont.buf = log_text(msg); 2268 2269 len += cont_print_text(&fake_cont, text + len, sizeof(text) - len); 2270 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation --yrj/dFKFPuw6o+aM Content-Type: application/octet-stream Content-Disposition: attachment; filename=".config.gz" Content-Transfer-Encoding: base64 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 wZgyUlgC8B/rbE1Wt1kAAA== --yrj/dFKFPuw6o+aM--