Message ID | E1da2Z7-0008GG-AV@rmk-PC.armlinux.org.uk (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Tue, Jul 25, 2017 at 05:20:09PM +0100, Russell King wrote: > dtc uses an incorrect format specifier for printing a uint64_t value. > uint64_t may be either 'unsigned long' or 'unsigned long long' depending > on the host architecture. > > Fix this by using %llx and casting to unsigned long long, which ensures > that we always have a wide enough variable to print 64 bits of hex. > > HOSTCC scripts/dtc/checks.o > scripts/dtc/checks.c: In function 'check_simple_bus_reg': > scripts/dtc/checks.c:876:2: warning: format '%zx' expects argument of type 'size_t', but argument 4 has type 'uint64_t' [-Wformat=] > snprintf(unit_addr, sizeof(unit_addr), "%zx", reg); > ^ > scripts/dtc/checks.c:876:2: warning: format '%zx' expects argument of type 'size_t', but argument 4 has type 'uint64_t' [-Wformat=] > > Fixes: 828d4cdd012c ("dtc: check.c fix compile error") > Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> This (embarrassing) error is already fixed in upstream dtc. > --- > scripts/dtc/checks.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > I've been carrying this patch for some time, but I guess hardly anyone > builds DT based kernels on 32-bit x86 boxes anymore as it has remained > unfixed. > > diff --git a/scripts/dtc/checks.c b/scripts/dtc/checks.c > index 4b72b530c84f..62ea8f83d4a0 100644 > --- a/scripts/dtc/checks.c > +++ b/scripts/dtc/checks.c > @@ -873,7 +873,7 @@ static void check_simple_bus_reg(struct check *c, struct dt_info *dti, struct no > while (size--) > reg = (reg << 32) | fdt32_to_cpu(*(cells++)); > > - snprintf(unit_addr, sizeof(unit_addr), "%zx", reg); > + snprintf(unit_addr, sizeof(unit_addr), "%llx", (unsigned long long)reg); > if (!streq(unitname, unit_addr)) > FAIL(c, dti, "Node %s simple-bus unit address format error, expected \"%s\"", > node->fullpath, unit_addr);
On Wed, Jul 26, 2017 at 11:30:04AM +1000, David Gibson wrote: > On Tue, Jul 25, 2017 at 05:20:09PM +0100, Russell King wrote: > > dtc uses an incorrect format specifier for printing a uint64_t value. > > uint64_t may be either 'unsigned long' or 'unsigned long long' depending > > on the host architecture. > > > > Fix this by using %llx and casting to unsigned long long, which ensures > > that we always have a wide enough variable to print 64 bits of hex. > > > > HOSTCC scripts/dtc/checks.o > > scripts/dtc/checks.c: In function 'check_simple_bus_reg': > > scripts/dtc/checks.c:876:2: warning: format '%zx' expects argument of type 'size_t', but argument 4 has type 'uint64_t' [-Wformat=] > > snprintf(unit_addr, sizeof(unit_addr), "%zx", reg); > > ^ > > scripts/dtc/checks.c:876:2: warning: format '%zx' expects argument of type 'size_t', but argument 4 has type 'uint64_t' [-Wformat=] > > > > Fixes: 828d4cdd012c ("dtc: check.c fix compile error") > > Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> > > This (embarrassing) error is already fixed in upstream dtc. It remains unfixed in 4.13-rc4. How do we get this fixed in the kernel's dtc? From what I can see, sending a patch to fix stuff doesn't work.
On Tue, Aug 08, 2017 at 12:28:19PM +0100, Russell King - ARM Linux wrote: > On Wed, Jul 26, 2017 at 11:30:04AM +1000, David Gibson wrote: > > On Tue, Jul 25, 2017 at 05:20:09PM +0100, Russell King wrote: > > > dtc uses an incorrect format specifier for printing a uint64_t value. > > > uint64_t may be either 'unsigned long' or 'unsigned long long' depending > > > on the host architecture. > > > > > > Fix this by using %llx and casting to unsigned long long, which ensures > > > that we always have a wide enough variable to print 64 bits of hex. > > > > > > HOSTCC scripts/dtc/checks.o > > > scripts/dtc/checks.c: In function 'check_simple_bus_reg': > > > scripts/dtc/checks.c:876:2: warning: format '%zx' expects argument of type 'size_t', but argument 4 has type 'uint64_t' [-Wformat=] > > > snprintf(unit_addr, sizeof(unit_addr), "%zx", reg); > > > ^ > > > scripts/dtc/checks.c:876:2: warning: format '%zx' expects argument of type 'size_t', but argument 4 has type 'uint64_t' [-Wformat=] > > > > > > Fixes: 828d4cdd012c ("dtc: check.c fix compile error") > > > Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> > > > > This (embarrassing) error is already fixed in upstream dtc. > > It remains unfixed in 4.13-rc4. How do we get this fixed in the > kernel's dtc? From what I can see, sending a patch to fix stuff > doesn't work. Um.. I don't know. I haven't been the person doing updates of the kernel dtc to match upstream dtc for ages.
On Tue, Aug 8, 2017 at 11:06 PM, David Gibson <david@gibson.dropbear.id.au> wrote: > On Tue, Aug 08, 2017 at 12:28:19PM +0100, Russell King - ARM Linux wrote: >> On Wed, Jul 26, 2017 at 11:30:04AM +1000, David Gibson wrote: >> > On Tue, Jul 25, 2017 at 05:20:09PM +0100, Russell King wrote: >> > > dtc uses an incorrect format specifier for printing a uint64_t value. >> > > uint64_t may be either 'unsigned long' or 'unsigned long long' depending >> > > on the host architecture. >> > > >> > > Fix this by using %llx and casting to unsigned long long, which ensures >> > > that we always have a wide enough variable to print 64 bits of hex. >> > > >> > > HOSTCC scripts/dtc/checks.o >> > > scripts/dtc/checks.c: In function 'check_simple_bus_reg': >> > > scripts/dtc/checks.c:876:2: warning: format '%zx' expects argument of type 'size_t', but argument 4 has type 'uint64_t' [-Wformat=] >> > > snprintf(unit_addr, sizeof(unit_addr), "%zx", reg); >> > > ^ >> > > scripts/dtc/checks.c:876:2: warning: format '%zx' expects argument of type 'size_t', but argument 4 has type 'uint64_t' [-Wformat=] >> > > >> > > Fixes: 828d4cdd012c ("dtc: check.c fix compile error") >> > > Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> >> > >> > This (embarrassing) error is already fixed in upstream dtc. >> >> It remains unfixed in 4.13-rc4. How do we get this fixed in the >> kernel's dtc? From what I can see, sending a patch to fix stuff >> doesn't work. Sorry, didn't see this until Andrew M picked it up. > Um.. I don't know. I haven't been the person doing updates of the > kernel dtc to match upstream dtc for ages. The flow is submit a patch to upstream dtc on devicetree-compiler@vger.kernel.org and then bug me to cherry-pick or sync dtc. I will cherry-pick the upstream version. Rob
On Thu, Aug 31, 2017 at 10:58:12AM -0500, Rob Herring wrote: > On Tue, Aug 8, 2017 at 11:06 PM, David Gibson > <david@gibson.dropbear.id.au> wrote: > > On Tue, Aug 08, 2017 at 12:28:19PM +0100, Russell King - ARM Linux wrote: > >> On Wed, Jul 26, 2017 at 11:30:04AM +1000, David Gibson wrote: > >> > On Tue, Jul 25, 2017 at 05:20:09PM +0100, Russell King wrote: > >> > > dtc uses an incorrect format specifier for printing a uint64_t value. > >> > > uint64_t may be either 'unsigned long' or 'unsigned long long' depending > >> > > on the host architecture. > >> > > > >> > > Fix this by using %llx and casting to unsigned long long, which ensures > >> > > that we always have a wide enough variable to print 64 bits of hex. > >> > > > >> > > HOSTCC scripts/dtc/checks.o > >> > > scripts/dtc/checks.c: In function 'check_simple_bus_reg': > >> > > scripts/dtc/checks.c:876:2: warning: format '%zx' expects argument of type 'size_t', but argument 4 has type 'uint64_t' [-Wformat=] > >> > > snprintf(unit_addr, sizeof(unit_addr), "%zx", reg); > >> > > ^ > >> > > scripts/dtc/checks.c:876:2: warning: format '%zx' expects argument of type 'size_t', but argument 4 has type 'uint64_t' [-Wformat=] > >> > > > >> > > Fixes: 828d4cdd012c ("dtc: check.c fix compile error") > >> > > Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> > >> > > >> > This (embarrassing) error is already fixed in upstream dtc. > >> > >> It remains unfixed in 4.13-rc4. How do we get this fixed in the > >> kernel's dtc? From what I can see, sending a patch to fix stuff > >> doesn't work. > > Sorry, didn't see this until Andrew M picked it up. How do we know whether whatever is in upstream dtc fixes the problem that I'm seeing?
On Thu, Aug 31, 2017 at 11:16 AM, Russell King - ARM Linux <linux@armlinux.org.uk> wrote: > On Thu, Aug 31, 2017 at 10:58:12AM -0500, Rob Herring wrote: >> On Tue, Aug 8, 2017 at 11:06 PM, David Gibson >> <david@gibson.dropbear.id.au> wrote: >> > On Tue, Aug 08, 2017 at 12:28:19PM +0100, Russell King - ARM Linux wrote: >> >> On Wed, Jul 26, 2017 at 11:30:04AM +1000, David Gibson wrote: >> >> > On Tue, Jul 25, 2017 at 05:20:09PM +0100, Russell King wrote: >> >> > > dtc uses an incorrect format specifier for printing a uint64_t value. >> >> > > uint64_t may be either 'unsigned long' or 'unsigned long long' depending >> >> > > on the host architecture. >> >> > > >> >> > > Fix this by using %llx and casting to unsigned long long, which ensures >> >> > > that we always have a wide enough variable to print 64 bits of hex. >> >> > > >> >> > > HOSTCC scripts/dtc/checks.o >> >> > > scripts/dtc/checks.c: In function 'check_simple_bus_reg': >> >> > > scripts/dtc/checks.c:876:2: warning: format '%zx' expects argument of type 'size_t', but argument 4 has type 'uint64_t' [-Wformat=] >> >> > > snprintf(unit_addr, sizeof(unit_addr), "%zx", reg); >> >> > > ^ >> >> > > scripts/dtc/checks.c:876:2: warning: format '%zx' expects argument of type 'size_t', but argument 4 has type 'uint64_t' [-Wformat=] >> >> > > >> >> > > Fixes: 828d4cdd012c ("dtc: check.c fix compile error") >> >> > > Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> >> >> > >> >> > This (embarrassing) error is already fixed in upstream dtc. >> >> >> >> It remains unfixed in 4.13-rc4. How do we get this fixed in the >> >> kernel's dtc? From what I can see, sending a patch to fix stuff >> >> doesn't work. >> >> Sorry, didn't see this until Andrew M picked it up. > > How do we know whether whatever is in upstream dtc fixes the problem > that I'm seeing? Build upstream dtc or here's a branch[1] with the cherry-picked fix. Rob [1] git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git dt/testing
On Thu, Aug 31, 2017 at 12:01 PM, Rob Herring <robh+dt@kernel.org> wrote: > On Thu, Aug 31, 2017 at 11:16 AM, Russell King - ARM Linux > <linux@armlinux.org.uk> wrote: >> On Thu, Aug 31, 2017 at 10:58:12AM -0500, Rob Herring wrote: >>> On Tue, Aug 8, 2017 at 11:06 PM, David Gibson >>> <david@gibson.dropbear.id.au> wrote: >>> > On Tue, Aug 08, 2017 at 12:28:19PM +0100, Russell King - ARM Linux wrote: >>> >> On Wed, Jul 26, 2017 at 11:30:04AM +1000, David Gibson wrote: >>> >> > On Tue, Jul 25, 2017 at 05:20:09PM +0100, Russell King wrote: >>> >> > > dtc uses an incorrect format specifier for printing a uint64_t value. >>> >> > > uint64_t may be either 'unsigned long' or 'unsigned long long' depending >>> >> > > on the host architecture. >>> >> > > >>> >> > > Fix this by using %llx and casting to unsigned long long, which ensures >>> >> > > that we always have a wide enough variable to print 64 bits of hex. >>> >> > > >>> >> > > HOSTCC scripts/dtc/checks.o >>> >> > > scripts/dtc/checks.c: In function 'check_simple_bus_reg': >>> >> > > scripts/dtc/checks.c:876:2: warning: format '%zx' expects argument of type 'size_t', but argument 4 has type 'uint64_t' [-Wformat=] >>> >> > > snprintf(unit_addr, sizeof(unit_addr), "%zx", reg); >>> >> > > ^ >>> >> > > scripts/dtc/checks.c:876:2: warning: format '%zx' expects argument of type 'size_t', but argument 4 has type 'uint64_t' [-Wformat=] >>> >> > > >>> >> > > Fixes: 828d4cdd012c ("dtc: check.c fix compile error") >>> >> > > Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> >>> >> > >>> >> > This (embarrassing) error is already fixed in upstream dtc. >>> >> >>> >> It remains unfixed in 4.13-rc4. How do we get this fixed in the >>> >> kernel's dtc? From what I can see, sending a patch to fix stuff >>> >> doesn't work. >>> >>> Sorry, didn't see this until Andrew M picked it up. >> >> How do we know whether whatever is in upstream dtc fixes the problem >> that I'm seeing? > > Build upstream dtc or here's a branch[1] with the cherry-picked fix. Well, your fix went in before I got the cherry-pick sent to Linus. Still, let me know if there's any issue with the upstream fix because when I sync dtc this fix is going to be overwritten with upstream. Rob
diff --git a/scripts/dtc/checks.c b/scripts/dtc/checks.c index 4b72b530c84f..62ea8f83d4a0 100644 --- a/scripts/dtc/checks.c +++ b/scripts/dtc/checks.c @@ -873,7 +873,7 @@ static void check_simple_bus_reg(struct check *c, struct dt_info *dti, struct no while (size--) reg = (reg << 32) | fdt32_to_cpu(*(cells++)); - snprintf(unit_addr, sizeof(unit_addr), "%zx", reg); + snprintf(unit_addr, sizeof(unit_addr), "%llx", (unsigned long long)reg); if (!streq(unitname, unit_addr)) FAIL(c, dti, "Node %s simple-bus unit address format error, expected \"%s\"", node->fullpath, unit_addr);
dtc uses an incorrect format specifier for printing a uint64_t value. uint64_t may be either 'unsigned long' or 'unsigned long long' depending on the host architecture. Fix this by using %llx and casting to unsigned long long, which ensures that we always have a wide enough variable to print 64 bits of hex. HOSTCC scripts/dtc/checks.o scripts/dtc/checks.c: In function 'check_simple_bus_reg': scripts/dtc/checks.c:876:2: warning: format '%zx' expects argument of type 'size_t', but argument 4 has type 'uint64_t' [-Wformat=] snprintf(unit_addr, sizeof(unit_addr), "%zx", reg); ^ scripts/dtc/checks.c:876:2: warning: format '%zx' expects argument of type 'size_t', but argument 4 has type 'uint64_t' [-Wformat=] Fixes: 828d4cdd012c ("dtc: check.c fix compile error") Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> --- scripts/dtc/checks.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) I've been carrying this patch for some time, but I guess hardly anyone builds DT based kernels on 32-bit x86 boxes anymore as it has remained unfixed.