Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp3722855imm; Tue, 29 May 2018 12:21:09 -0700 (PDT) X-Google-Smtp-Source: AB8JxZoen3XhFPJyX2+5CYunfsX1m+HFJfd5EGXO7mjjmDubOsYem2Tnb2OIGOTOJZSsNqNEUAj8 X-Received: by 2002:a17:902:b60b:: with SMTP id b11-v6mr19096591pls.330.1527621669050; Tue, 29 May 2018 12:21:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527621669; cv=none; d=google.com; s=arc-20160816; b=CNhh5AXF3S0viykSP40sZlIb16Ku/2hV6PVIjPqO3fmc8NYr3nohfA5ywWhThQhje+ nKdsYnOMB4HiXeSGSWk7+Y0KUuVqGXjSVMfXP3nTJ/d7x2kX5qwfDSQagat7oA/LRJi9 rGuvJaQE8TtrZG7w3gaoL2YVM7oQO73IWYqsVioaseHuBu0i+8O8DQ3ffKd4P3rxTdVz dtfxrRiEbtOhZpRF8/vP/6MBk9m1sFgFwINqW2/qAK0nzfP4SRPrB95E3tK/JNqVrECG tjNLCvNpGZK3Qrq1Yc429RyF9YnmL2lzK/BQDT9+zOgYIv0Vo9V/PNLZwBaTg298F2Ag swIQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature:arc-authentication-results; bh=Bcz7Rv8IIRMdjcyuxKBlk6ewKcxmagJCr8q2Cgs9bZA=; b=NpvZb4Qw2YgGiYA1ZWRGS5cqHdeV44jk2FgHTcPjhoUkse4CBwuT5evGhQVX6YcHnV Pxbe79RCIet2S33j6zkg5FMOE1QKJ3J5QPixXKFC6dTHyrNq5KBs/B5qrf9VaB0bWhEk 0bw2bBklB9okO2QkL6fiN6D9sT5lkZerCHgRKbOJ+fzskiWn/K4yafqqEl37AcII7oxs ucW8z92Ixe2BcjxQeZ1W4RqWzG41vXlnzXuP8qXh56dF9rZdvEEN5YfVXgC2nsHlyFVv 2faJZyUb6AT94/I0M+uC9q2A2KZz/EDgSj2Hg5ekKmeGP4dlwjy4jDOkTPHpunm3lzO1 4ZIg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=nmcpsruG; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id t69-v6si8848065pgd.55.2018.05.29.12.20.54; Tue, 29 May 2018 12:21:08 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=nmcpsruG; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S966230AbeE2TUU (ORCPT + 99 others); Tue, 29 May 2018 15:20:20 -0400 Received: from mail-wr0-f193.google.com ([209.85.128.193]:38398 "EHLO mail-wr0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S965541AbeE2TUR (ORCPT ); Tue, 29 May 2018 15:20:17 -0400 Received: by mail-wr0-f193.google.com with SMTP id 94-v6so27137778wrf.5 for ; Tue, 29 May 2018 12:20:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id; bh=Bcz7Rv8IIRMdjcyuxKBlk6ewKcxmagJCr8q2Cgs9bZA=; b=nmcpsruGxe149p9YQm8gxlP74IVqXJQi6QAhCKLvG2DdlZ0hxJksRehL02+Z51O8jf VvGjfI4zcsuNITj5XNQqQ4vWVACKZB2fueiYV3g7K0MQLwu2zyN0pAfrDg0amMFLyJoP AuPi4EvsU5wie9dz1v1W60hTwaMN5EtFSWi78Q9q8b/ef9aUtRGW2dAy/rf5wMYTFhtx aKlXKHVTNw4fE4Fz8IINHf4szJjLz5chXNswQ0pJX6Fz+zl8v6IV6jjBNt161btSRDva 9UZD5HbJtpuK4ZlVaI3UKWZhlhSltYrVu67XPtGSNU/7rqT4PsSkz8y4gU8IO5+PgCXV DCfA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id; bh=Bcz7Rv8IIRMdjcyuxKBlk6ewKcxmagJCr8q2Cgs9bZA=; b=YTUe6jgH5yDvwESSS7SL/xJj/LwpWb61hl48ia83J5oktRc4C45XUFNLfmLpxOJir7 zG9kJsmlhjfTqYSYtJsuuWrHzzo3gc/N75LmmppXlC3dG4v8Gz9BNESviXgCzJr7IpU+ lq4yVhSRhefZeqYMh0+hEN+m90DtTDFlKmWQazQ4szIy5fr2VKWPkSIItFysl7g/89VX M9+Q++9BaRUgf4KwpNnubwszL6Hh9tEt/1GgJBr7SIBcTT3/rPFmx+gf8VzFupzQEOoy NbPqb00aTr1VexkZAdHgvxaq0h3FV/7mBLexGHSTYGslFxKe7gk0FkXBjOdNhEA4QF6H iBUA== X-Gm-Message-State: ALKqPweTYwtUvhRjaOEx0ZmDQJotERvEd6jaubeI2IFvhV7DT4D62KUK hZ3VH/EcyNVypW4zNJgDWUo= X-Received: by 2002:adf:da4b:: with SMTP id r11-v6mr13663526wrl.154.1527621615469; Tue, 29 May 2018 12:20:15 -0700 (PDT) Received: from macbookpro.malat.net (bru31-1-78-225-226-121.fbx.proxad.net. [78.225.226.121]) by smtp.gmail.com with ESMTPSA id 184-v6sm16867399wmv.33.2018.05.29.12.20.14 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 29 May 2018 12:20:14 -0700 (PDT) Received: by macbookpro.malat.net (Postfix, from userid 1000) id A679110C03D0; Tue, 29 May 2018 21:20:13 +0200 (CEST) From: Mathieu Malaterre To: Michael Ellerman Cc: Stephen Rothwell , Mathieu Malaterre , Benjamin Herrenschmidt , Paul Mackerras , linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org Subject: [PATCH] powerpc/prom: Fix %u/%llx usage since prom_printf() change Date: Tue, 29 May 2018 21:20:01 +0200 Message-Id: <20180529192001.30200-1-malat@debian.org> X-Mailer: git-send-email 2.11.0 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In commit eae5f709a4d7 ("powerpc: Add __printf verification to prom_printf") __printf attribute was added to prom_printf(), which means GCC started warning about type/format mismatches. As part of that commit we changed some "%lx" formats to "%llx" where the type is actually unsigned long long. Unfortunately prom_printf() doesn't know how to print "%llx", it just prints a literal "lx", eg: reserved memory map: lx - lx lx - lx prom_printf() also doesn't know how to print "%u" (only "%lu"), it just print a literal "u", eg: Max number of cores passed to firmware: u (NR_CPUS = 2048) instead of: Max number of cores passed to firmware: 2048 (NR_CPUS = 2048) This commit adds support for the missing formatters. Fixes: eae5f709a4d7 ("powerpc: Add __printf verification to prom_printf") Reported-by: Michael Ellerman Reported-by: Stephen Rothwell Signed-off-by: Mathieu Malaterre --- I've reviewed all formatters added in eae5f709a4d7 and only %u and %llx were actually missing (eg. llu or lld are not used) arch/powerpc/kernel/prom_init.c | 72 +++++++++++++++++++++++++++-------------- 1 file changed, 48 insertions(+), 24 deletions(-) diff --git a/arch/powerpc/kernel/prom_init.c b/arch/powerpc/kernel/prom_init.c index 4d62f561f272..2c04516fe274 100644 --- a/arch/powerpc/kernel/prom_init.c +++ b/arch/powerpc/kernel/prom_init.c @@ -301,6 +301,9 @@ static void __init prom_print(const char *msg) } +/* both prom_print_hex & prom_print_dec takes an unsigned long as input so that + * we do not need __udivdi3 or __umoddi3 on 32bits + */ static void __init prom_print_hex(unsigned long val) { int i, nibbles = sizeof(val)*2; @@ -341,6 +344,7 @@ static void __init prom_printf(const char *format, ...) va_list args; unsigned long v; long vs; + int n = 0; va_start(args, format); for (p = format; *p != 0; p = q) { @@ -359,6 +363,10 @@ static void __init prom_printf(const char *format, ...) ++q; if (*q == 0) break; + while (*q == 'l') { + ++q; + ++n; + } switch (*q) { case 's': ++q; @@ -367,39 +375,55 @@ static void __init prom_printf(const char *format, ...) break; case 'x': ++q; - v = va_arg(args, unsigned long); + switch (n) { + case 0: + v = va_arg(args, unsigned int); + break; + case 1: + v = va_arg(args, unsigned long); + break; + case 2: + default: + v = va_arg(args, unsigned long long); + break; + } prom_print_hex(v); break; - case 'd': + case 'u': ++q; - vs = va_arg(args, int); - if (vs < 0) { - prom_print("-"); - vs = -vs; + switch (n) { + case 0: + v = va_arg(args, unsigned int); + break; + case 1: + v = va_arg(args, unsigned long); + break; + case 2: + default: + v = va_arg(args, unsigned long long); + break; } - prom_print_dec(vs); + prom_print_dec(v); break; - case 'l': + case 'd': ++q; - if (*q == 0) + switch (n) { + case 0: + vs = va_arg(args, int); break; - else if (*q == 'x') { - ++q; - v = va_arg(args, unsigned long); - prom_print_hex(v); - } else if (*q == 'u') { /* '%lu' */ - ++q; - v = va_arg(args, unsigned long); - prom_print_dec(v); - } else if (*q == 'd') { /* %ld */ - ++q; + case 1: vs = va_arg(args, long); - if (vs < 0) { - prom_print("-"); - vs = -vs; - } - prom_print_dec(vs); + break; + case 2: + default: + vs = va_arg(args, long long); + break; + } + if (vs < 0) { + prom_print("-"); + vs = -vs; } + prom_print_dec(vs); break; } } -- 2.11.0