All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrea Righi <righi.andrea@gmail.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: balbir@linux.vnet.ibm.com, linux-mm@kvack.org,
	skumar@linux.vnet.ibm.com, yamamoto@valinux.co.jp,
	menage@google.com, lizf@cn.fujitsu.com,
	linux-kernel@vger.kernel.org, xemul@openvz.org,
	kamezawa.hiroyu@jp.fujitsu.com
Subject: Re: [-mm][PATCH 2/4] Setup the memrlimit controller (v5)
Date: Thu, 12 Jun 2008 00:47:27 +0200	[thread overview]
Message-ID: <485055FF.9020500@gmail.com> (raw)
In-Reply-To: <20080611134323.936063d3.akpm@linux-foundation.org>

Andrew Morton wrote:
>> At least we could add something like:
>>
>> #ifdef CONFIG_32BIT
>> #define PAGE_ALIGN64(addr) (((((addr)+PAGE_SIZE-1))>>PAGE_SHIFT)<<PAGE_SHIFT)
>> #else
>> #define PAGE_ALIGN64(addr) PAGE_ALIGN(addr)
>> #endif
>>
>> But IMHO the single PAGE_ALIGN64() implementation is more clear.
> 
> No, we should just fix PAGE_ALIGN.  It should work correctly when
> passed a long-long.  Otherwse it's just a timebomb.
> 
> This:
> 
> #define PAGE_ALIGN(addr) ({				\
> 	typeof(addr) __size = PAGE_SIZE;		\
> 	typeof(addr) __mask = PAGE_MASK;		\
> 	(addr + __size - 1) & __mask;			\
> })
> 
> (with a suitable comment) does what we want.  I didn't check to see
> whether this causes the compiler to generate larger code, but it
> shouldn't.
> 

No, it doesn't work. The problem seems to be in the PAGE_MASK definition
(from include/asm-x86/page.h for example):

/* PAGE_SHIFT determines the page size */
#define PAGE_SHIFT      12
#define PAGE_SIZE       (_AC(1,UL) << PAGE_SHIFT)
#define PAGE_MASK       (~(PAGE_SIZE-1))

The "~" is performed on a 32-bit value, so everything in "and" with
PAGE_MASK greater than 4GB will be truncated to the 32-bit boundary.

What do you think about the following?

#define PAGE_SIZE64 (1ULL << PAGE_SHIFT)
#define PAGE_MASK64 (~(PAGE_SIZE64 - 1))

#define PAGE_ALIGN(addr) ({					\
	typeof(addr) __size = PAGE_SIZE;			\
	typeof(addr) __ret = (addr) + __size - 1;		\
	__ret > -1UL ? __ret & PAGE_MASK64 : __ret & PAGE_MASK;	\
})

-Andrea

WARNING: multiple messages have this Message-ID (diff)
From: Andrea Righi <righi.andrea@gmail.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: balbir@linux.vnet.ibm.com, linux-mm@kvack.org,
	skumar@linux.vnet.ibm.com, yamamoto@valinux.co.jp,
	menage@google.com, lizf@cn.fujitsu.com,
	linux-kernel@vger.kernel.org, xemul@openvz.org,
	kamezawa.hiroyu@jp.fujitsu.com
Subject: Re: [-mm][PATCH 2/4] Setup the memrlimit controller (v5)
Date: Thu, 12 Jun 2008 00:47:27 +0200	[thread overview]
Message-ID: <485055FF.9020500@gmail.com> (raw)
In-Reply-To: <20080611134323.936063d3.akpm@linux-foundation.org>

Andrew Morton wrote:
>> At least we could add something like:
>>
>> #ifdef CONFIG_32BIT
>> #define PAGE_ALIGN64(addr) (((((addr)+PAGE_SIZE-1))>>PAGE_SHIFT)<<PAGE_SHIFT)
>> #else
>> #define PAGE_ALIGN64(addr) PAGE_ALIGN(addr)
>> #endif
>>
>> But IMHO the single PAGE_ALIGN64() implementation is more clear.
> 
> No, we should just fix PAGE_ALIGN.  It should work correctly when
> passed a long-long.  Otherwse it's just a timebomb.
> 
> This:
> 
> #define PAGE_ALIGN(addr) ({				\
> 	typeof(addr) __size = PAGE_SIZE;		\
> 	typeof(addr) __mask = PAGE_MASK;		\
> 	(addr + __size - 1) & __mask;			\
> })
> 
> (with a suitable comment) does what we want.  I didn't check to see
> whether this causes the compiler to generate larger code, but it
> shouldn't.
> 

No, it doesn't work. The problem seems to be in the PAGE_MASK definition
(from include/asm-x86/page.h for example):

/* PAGE_SHIFT determines the page size */
#define PAGE_SHIFT      12
#define PAGE_SIZE       (_AC(1,UL) << PAGE_SHIFT)
#define PAGE_MASK       (~(PAGE_SIZE-1))

The "~" is performed on a 32-bit value, so everything in "and" with
PAGE_MASK greater than 4GB will be truncated to the 32-bit boundary.

What do you think about the following?

#define PAGE_SIZE64 (1ULL << PAGE_SHIFT)
#define PAGE_MASK64 (~(PAGE_SIZE64 - 1))

#define PAGE_ALIGN(addr) ({					\
	typeof(addr) __size = PAGE_SIZE;			\
	typeof(addr) __ret = (addr) + __size - 1;		\
	__ret > -1UL ? __ret & PAGE_MASK64 : __ret & PAGE_MASK;	\
})

-Andrea

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

  reply	other threads:[~2008-06-11 22:47 UTC|newest]

Thread overview: 64+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-05-21 15:29 [-mm][PATCH 0/4] Add memrlimit controller (v5) Balbir Singh
2008-05-21 15:29 ` Balbir Singh
2008-05-21 15:29 ` [-mm][PATCH 1/4] Add memrlimit controller documentation (v5) Balbir Singh
2008-05-21 15:29   ` Balbir Singh
2008-05-22  4:16   ` Andrew Morton
2008-05-22  4:16     ` Andrew Morton
2008-05-22 10:13     ` Balbir Singh
2008-05-22 10:13       ` Balbir Singh
2008-05-21 15:29 ` [-mm][PATCH 2/4] Setup the memrlimit controller (v5) Balbir Singh
2008-05-21 15:29   ` Balbir Singh
2008-05-22  4:18   ` Andrew Morton
2008-05-22  4:18     ` Andrew Morton
2008-05-22 10:14     ` Balbir Singh
2008-05-22 10:14       ` Balbir Singh
2008-06-11 17:10   ` Andrea Righi
2008-06-11 17:10     ` Andrea Righi
2008-06-11 17:33     ` Balbir Singh
2008-06-11 17:33       ` Balbir Singh
2008-06-11 18:48       ` Andrea Righi
2008-06-11 18:48         ` Andrea Righi
2008-06-11 19:15     ` Andrew Morton
2008-06-11 19:15       ` Andrew Morton
2008-06-11 20:17       ` Andrea Righi
2008-06-11 20:17         ` Andrea Righi
2008-06-11 20:43         ` Andrew Morton
2008-06-11 20:43           ` Andrew Morton
2008-06-11 22:47           ` Andrea Righi [this message]
2008-06-11 22:47             ` Andrea Righi
2008-06-11 22:55             ` Andrew Morton
2008-06-11 22:55               ` Andrew Morton
2008-06-11 23:04               ` Andrea Righi
2008-06-11 23:04                 ` Andrea Righi
2008-06-12  6:13               ` Balbir Singh
2008-06-12  6:13                 ` Balbir Singh
2008-06-12  8:52                 ` Andrea Righi
2008-06-12  8:52                   ` Andrea Righi
2008-06-12  9:02                   ` Andrew Morton
2008-06-12  9:02                     ` Andrew Morton
2008-06-12  9:12                     ` Andrea Righi
2008-06-12  9:12                       ` Andrea Righi
2008-06-12 17:02                     ` [PATCH -mm] PAGE_ALIGN(): correctly handle 64-bit values on 32-bit architectures Andrea Righi
2008-06-12 17:02                       ` Andrea Righi
2008-06-12 22:14                       ` Andrea Righi
2008-06-12 22:14                         ` Andrea Righi
2008-06-13  9:37                       ` Balbir Singh
2008-06-13  9:37                         ` Balbir Singh
2008-06-13  9:45                         ` Li Zefan
2008-06-13  9:45                           ` Li Zefan
2008-05-21 15:29 ` [-mm][PATCH 3/4] cgroup mm owner callback changes to add task info (v5) Balbir Singh
2008-05-21 15:29   ` Balbir Singh
2008-05-22  4:19   ` Andrew Morton
2008-05-22  4:19     ` Andrew Morton
2008-05-22 10:14     ` Balbir Singh
2008-05-22 10:14       ` Balbir Singh
2008-05-21 15:30 ` [-mm][PATCH 4/4] Add memrlimit controller accounting and control (v5) Balbir Singh
2008-05-21 15:30   ` Balbir Singh
2008-05-21 17:20   ` Vivek Goyal
2008-05-21 17:20     ` Vivek Goyal
2008-05-22  4:41     ` Balbir Singh
2008-05-22  4:41       ` Balbir Singh
2008-05-22  4:24   ` Andrew Morton
2008-05-22  4:24     ` Andrew Morton
2008-05-22 10:15     ` Balbir Singh
2008-05-22 10:15       ` Balbir Singh

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=485055FF.9020500@gmail.com \
    --to=righi.andrea@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=balbir@linux.vnet.ibm.com \
    --cc=kamezawa.hiroyu@jp.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=lizf@cn.fujitsu.com \
    --cc=menage@google.com \
    --cc=skumar@linux.vnet.ibm.com \
    --cc=xemul@openvz.org \
    --cc=yamamoto@valinux.co.jp \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.