linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Andrew Morton <akpm@linux-foundation.org>
To: Yinghai Lu <yinghai@kernel.org>
Cc: Christoph Lameter <cl@linux-foundation.org>,
	"H. Peter Anvin" <hpa@zytor.com>, Ingo Molnar <mingo@elte.hu>,
	Thomas Gleixner <tglx@linutronix.de>,
	Jesse Barnes <jbarnes@virtuousgeek.org>,
	linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org
Subject: Re: [PATCH 22/37] move round_up/down to kernel.h
Date: Mon, 25 Jan 2010 16:40:32 -0800	[thread overview]
Message-ID: <20100125164032.330be0e6.akpm@linux-foundation.org> (raw)
In-Reply-To: <4B57675E.7070309@kernel.org>

On Wed, 20 Jan 2010 12:28:14 -0800
Yinghai Lu <yinghai@kernel.org> wrote:

> On 01/19/2010 09:57 AM, Christoph Lameter wrote:
> > On Fri, 15 Jan 2010, Yinghai Lu wrote:
> > 
> >>
> >>  #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr))
> >>
> >> +/*
> >> + * This looks more complex than it should be. But we need to
> >> + * get the type for the ~ right in round_down (it needs to be
> >> + * as wide as the result!), and we want to evaluate the macro
> >> + * arguments just once each.
> >> + */
> >> +#define __round_mask(x,y) ((__typeof__(x))((y)-1))
> >> +#define round_up(x,y) ((((x)-1) | __round_mask(x,y))+1)
> >> +#define round_down(x,y) ((x) & ~__round_mask(x,y))
> >> +
> >>  #define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f))
> >>  #define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
> >>  #define roundup(x, y) ((((x) + ((y) - 1)) / (y)) * (y))
> > 
> > Note the last two lines! We already have roundup(), DIV_ROUND_UP and
> > DIV_ROUND_CLOSEST. Please integrate them properly. Maybe extract
> > __round_mask() from all of them.
> 
> like this, using DIVIDE for all ?
> 
> ---
>  include/linux/kernel.h |   14 ++++----------
>  1 file changed, 4 insertions(+), 10 deletions(-)
> 
> Index: linux-2.6/include/linux/kernel.h
> ===================================================================
> --- linux-2.6.orig/include/linux/kernel.h
> +++ linux-2.6/include/linux/kernel.h
> @@ -44,19 +44,13 @@ extern const char linux_proc_banner[];
>  
>  #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr))
>  
> -/*
> - * This looks more complex than it should be. But we need to
> - * get the type for the ~ right in round_down (it needs to be
> - * as wide as the result!), and we want to evaluate the macro
> - * arguments just once each.
> - */

umph.  It would have been better to read that comment, rather than
delete it!

> +#define roundup(x, y) ((((x) + ((y) - 1)) / (y)) * (y))

This references its second argument three times.

> +#define rounddown(x, y) (((x) / (y)) * (y))
> +#define round_up(x,y) roundup(x,y)
> +#define round_down(x,y) rounddown(x,y)

Please use checkpatch.pl.  Always.

>  #define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f))
>  #define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
> -#define roundup(x, y) ((((x) + ((y) - 1)) / (y)) * (y))
>  #define DIV_ROUND_CLOSEST(x, divisor)(			\
>  {							\
>  	typeof(divisor) __divisor = divisor;		\

This patch doesn't seem very good.  Nor does "[PATCH 24/38] move
round_up/down to kernel.h".

The problem is that arch/x86/include/asm/proto.h implements private
rounding macros.  The right way to fix that is to convert each x86
"call site" over to using the standard macros from kernel.h, then
finally remove the private definitions from
arch/x86/include/asm/proto.h.  Don't just copy them over to kernel.h
and make things muddier than they already are!

If during that conversion it is found that the standard macros for some
reason don't suit the x86 usage sites then please propose
enhancements/fixes to the existing kernel.h facilities.

And any such changes to kernel.h affect the whole world, so they
shouldn't be buried in the middle of some huge x86-specific patch
series which everyone sleeps through.  They can be _merged_ via the x86
tree - that doesn't matter much.  But it should be made clear to
everyone that these are changes which potentially affect every piece
of code in the tree.


  parent reply	other threads:[~2010-01-26  0:42 UTC|newest]

Thread overview: 60+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-01-16  3:06 [PATCH -v4 0/37] x86: not use bootmem for x86 Yinghai Lu
2010-01-16  3:06 ` [PATCH 01/37] x86: move range related operation to one file Yinghai Lu
2010-01-19 16:54   ` Christoph Lameter
2010-01-20 19:37     ` Yinghai Lu
2010-01-20 19:51       ` Christoph Lameter
2010-01-20 19:59         ` Yinghai Lu
2010-01-16  3:06 ` [PATCH 02/37] x86: check range in update range Yinghai Lu
2010-01-19 16:56   ` Christoph Lameter
2010-01-20 19:39     ` Yinghai Lu
2010-01-20 19:50       ` Christoph Lameter
2010-01-20 19:57         ` Yinghai Lu
2010-01-16  3:06 ` [PATCH 03/37] x86/pci: use u64 instead of size_t in amd_bus.c Yinghai Lu
2010-01-16  3:06 ` [PATCH 04/37] x86/pci: add cap_resource Yinghai Lu
2010-01-16  3:06 ` [PATCH 05/37] x86/pci: enable pci root res read out for 32bit too Yinghai Lu
2010-01-16  3:06 ` [PATCH 06/37] x86: call early_res_to_bootmem one time Yinghai Lu
2010-01-16  3:06 ` [PATCH 07/37] x86: introduce max_early_res and early_res_count Yinghai Lu
2010-01-16  3:06 ` [PATCH 08/37] x86: dynamic increase early_res array size Yinghai Lu
2010-01-16  3:06 ` [PATCH 09/37] x86: print bootmem free before pci_iommu_alloc and free_all_bootmem -v2 Yinghai Lu
2010-01-16  3:06 ` [PATCH 10/37] x86: make early_node_mem get mem > 4g if possible Yinghai Lu
2010-01-16  3:06 ` [PATCH 11/37] x86: only call dma32_reserve_bootmem 64bit !CONFIG_NUMA Yinghai Lu
2010-01-16  3:06 ` [PATCH 12/37] x86: make 64 bit use early_res instead of bootmem before slab Yinghai Lu
2010-01-16  3:06 ` [PATCH 13/37] sparsemem: put usemap for one node together Yinghai Lu
2010-01-16  3:06 ` [PATCH 14/37] sparsemem: put mem map " Yinghai Lu
2010-01-19 17:13   ` Christoph Lameter
2010-01-16  3:06 ` [PATCH 15/37] x86: change range end to start+size Yinghai Lu
2010-01-16  3:06 ` [PATCH 16/37] x86: move bios page reserve early to head32/64.c Yinghai Lu
2010-01-16  3:06 ` [PATCH 17/37] x86: seperate early_res related code from e820.c Yinghai Lu
2010-01-16  3:06 ` [PATCH 18/37] x86: add find_early_area_size Yinghai Lu
2010-01-16  3:06 ` [PATCH 19/37] x86: move back find_e820_area to e820.c Yinghai Lu
2010-01-16  3:06 ` [PATCH 20/37] early_res: enhance check_and_double_early_res Yinghai Lu
2010-01-16  3:06 ` [PATCH 21/37] x86: make 32bit support NO_BOOTMEM Yinghai Lu
2010-01-16  3:06 ` [PATCH 22/37] move round_up/down to kernel.h Yinghai Lu
2010-01-19 17:57   ` Christoph Lameter
2010-01-20 20:01     ` Yinghai Lu
2010-01-20 20:28     ` Yinghai Lu
2010-01-20 20:52       ` Christoph Lameter
2010-01-20 21:02         ` Yinghai Lu
2010-01-26  0:40       ` Andrew Morton [this message]
2010-01-26  0:58         ` H. Peter Anvin
2010-01-26  1:26           ` Andrew Morton
2010-01-16  3:06 ` [PATCH 23/37] x86: add find_fw_memmap_area Yinghai Lu
2010-01-16  3:06 ` [PATCH 24/37] core: move early_res Yinghai Lu
2010-01-16  3:06 ` [PATCH 25/37] ram_buffer_extend_print Yinghai Lu
2010-01-19 17:59   ` Christoph Lameter
2010-01-16  3:06 ` [PATCH 26/37] x86: remove bios data range from e820 Yinghai Lu
2010-01-16  3:06 ` [PATCH 27/37] irq: remove not need bootmem code Yinghai Lu
2010-01-16  3:06 ` [PATCH 28/37] radix: move radix init early Yinghai Lu
2010-01-16  3:07 ` [PATCH 29/37] sparseirq: change irq_desc_ptrs to static Yinghai Lu
2010-01-19 18:01   ` Christoph Lameter
2010-01-20 19:49     ` Yinghai Lu
2010-01-16  3:07 ` [PATCH 30/37] sparseirq: use radix_tree instead of ptrs array Yinghai Lu
2010-01-16  3:07 ` [PATCH 31/37] x86: remove arch_probe_nr_irqs Yinghai Lu
2010-01-16  3:07 ` [PATCH 32/37] x86, apic: Use logical flat on intel with <= 8 logical cpus Yinghai Lu
2010-01-16  3:07 ` [PATCH 33/37] use nr_cpus= to set nr_cpu_ids early Yinghai Lu
2010-01-19 18:03   ` Christoph Lameter
2010-01-20 19:54     ` Yinghai Lu
2010-01-16  3:07 ` [PATCH 34/37] x86: using logical flat for amd cpu too Yinghai Lu
2010-01-16  3:07 ` [PATCH 35/37] x86: according to nr_cpu_ids to decide if need to leave logical flat Yinghai Lu
2010-01-16  3:07 ` [PATCH 36/37] x86: make 32bit apic flat to physflat switch like 64bit Yinghai Lu
2010-01-16  3:07 ` [PATCH 37/37] x86: use num_processors for possible cpus Yinghai Lu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20100125164032.330be0e6.akpm@linux-foundation.org \
    --to=akpm@linux-foundation.org \
    --cc=cl@linux-foundation.org \
    --cc=hpa@zytor.com \
    --cc=jbarnes@virtuousgeek.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=tglx@linutronix.de \
    --cc=yinghai@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).