From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754479AbbLCVa5 (ORCPT ); Thu, 3 Dec 2015 16:30:57 -0500 Received: from mga03.intel.com ([134.134.136.65]:9284 "EHLO mga03.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750792AbbLCVa4 (ORCPT ); Thu, 3 Dec 2015 16:30:56 -0500 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.20,378,1444719600"; d="scan'208";a="612148602" Message-ID: <1449178138.15393.161.camel@linux.intel.com> Subject: Re: [PATCH v3 04/14] lib/vsprintf.c: expand field_width to 24 bits From: Andy Shevchenko To: Joe Perches , Rasmus Villemoes , Andrew Morton , Kees Cook , Martin Kletzander Cc: Andy Shevchenko , Maurizio Lombardi , Tejun Heo , linux-kernel@vger.kernel.org Date: Thu, 03 Dec 2015 23:28:58 +0200 In-Reply-To: <1449176047.17296.4.camel@perches.com> References: <1449175873-1780-1-git-send-email-linux@rasmusvillemoes.dk> <1449175873-1780-5-git-send-email-linux@rasmusvillemoes.dk> <1449176047.17296.4.camel@perches.com> Organization: Intel Finland Oy Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.18.2-1 Mime-Version: 1.0 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, 2015-12-03 at 12:54 -0800, Joe Perches wrote: > On Thu, 2015-12-03 at 21:51 +0100, Rasmus Villemoes wrote: > > Maurizio Lombardi reported a problem [1] with the %pb extension: It > > doesn't work for sufficiently large bitmaps, since the size is > > stashed > > in the field_width field of the struct printf_spec, which is > > currently > > an s16. Concretely, this manifested itself in > > /sys/bus/pseudo/drivers/scsi_debug/map being empty, since the > > bitmap > > printer got a size of 0, which is the 16 bit truncation of the > > actual > > bitmap size. > > > > We do want to keep struct printf_spec at 8 bytes so that it can > > cheaply be passed by value. The qualifier field is only used for > > internal bookkeeping in format_decode, so we might as well use a > > local > > variable for that. This gives us an additional 8 bits, which we can > > then use for the field width. > > > > To stay in 8 bytes, we need to do a little rearranging and make the > > type member a bitfield as well. For consistency, change all the > > members to bit fields. gcc doesn't generate much worse code with > > these > > changes (in fact, bloat-o-meter says we save 300 bytes - which I > > think > > is a little surprising). > > > > I didn't find a BUILD_BUG/compiletime_assertion/... which would > > work > > outside function context, so for now I just open-coded it. > > > > [1] http://thread.gmane.org/gmane.linux.kernel/2034835 > > Thanks for keeping at this Rasmus. > This seems quite reasonable. I like most of the stuff here, though, Joe, can we avoid open-coded BUILD_BUG_ON()? -- Andy Shevchenko Intel Finland Oy