All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dave Hansen <dave@linux.vnet.ibm.com>
To: Michal Nazarewicz <mina86@mina86.com>
Cc: Marek Szyprowski <m.szyprowski@samsung.com>,
	linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-samsung-soc@vger.kernel.org, linux-media@vger.kernel.org,
	linux-mm@kvack.org, Kyungmin Park <kyungmin.park@samsung.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
	Ankita Garg <ankita@in.ibm.com>,
	Daniel Walker <dwalker@codeaurora.org>,
	Johan MOSSBERG <johan.xx.mossberg@stericsson.com>,
	Mel Gorman <mel@csn.ul.ie>, Pawel Osciak <pawel@osciak.com>
Subject: Re: [PATCH 05/12] mm: alloc_contig_range() added
Date: Thu, 31 Mar 2011 13:28:42 -0700	[thread overview]
Message-ID: <1301603322.31087.1196.camel@nimitz> (raw)
In-Reply-To: <op.vs7umufd3l0zgt@mnazarewicz-glaptop>

On Thu, 2011-03-31 at 18:26 +0200, Michal Nazarewicz wrote:
> > On Thu, 2011-03-31 at 15:16 +0200, Marek Szyprowski wrote:
> >> +       ret = 0;
> >> +       while (!PageBuddy(pfn_to_page(start & (~0UL << ret))))
> >> +               if (WARN_ON(++ret >= MAX_ORDER))
> >> +                       return -EINVAL;
> 
> On Thu, 31 Mar 2011 18:02:41 +0200, Dave Hansen wrote:
> > Holy cow, that's dense.  Is there really no more straightforward way to
> > do that?
> 
> Which part exactly is dense?  What would be qualify as a more
> straightforward way?

I'm still not 100% sure what it's trying to do.  It looks like it
attempts to check all of "start"'s buddy pages.

unsigned long find_buddy(unsigned long pfn, int buddy)
{
	unsigned long page_idx = pfn & ((1 << MAX_ORDER) - 1); // You had a macro for this I think
	unsigned long buddy_idx = __find_buddy_index(page_idx, order);
	return page_idx + buddy_idx;
}

Is something like this equivalent?

int order;
for (order = 0; order <= MAX_ORDER; order++) {
	unsigned long buddy_pfn = find_buddy(start, order);
	struct page *buddy = pfn_to_page(buddy_pfn);
	if (PageBuddy(buddy)
		break;
	WARN();
	return -EINVAL;
}

I'm wondering also if you can share some code with __rmqueue().

> > In any case, please pull the ++ret bit out of the WARN_ON().  Some
> > people like to do:
> >
> > #define WARN_ON(...) do{}while(0)
> >
> > to save space on some systems.
> 
> I don't think that's the case.  Even if WARN_ON() decides not to print
> a warning, it will still return the value of the argument.  If not,
> a lot of code will brake.

Bah, sorry.  I'm confusing WARN_ON() and WARN().

-- Dave

--
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/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

WARNING: multiple messages have this Message-ID (diff)
From: dave@linux.vnet.ibm.com (Dave Hansen)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 05/12] mm: alloc_contig_range() added
Date: Thu, 31 Mar 2011 13:28:42 -0700	[thread overview]
Message-ID: <1301603322.31087.1196.camel@nimitz> (raw)
In-Reply-To: <op.vs7umufd3l0zgt@mnazarewicz-glaptop>

On Thu, 2011-03-31 at 18:26 +0200, Michal Nazarewicz wrote:
> > On Thu, 2011-03-31 at 15:16 +0200, Marek Szyprowski wrote:
> >> +       ret = 0;
> >> +       while (!PageBuddy(pfn_to_page(start & (~0UL << ret))))
> >> +               if (WARN_ON(++ret >= MAX_ORDER))
> >> +                       return -EINVAL;
> 
> On Thu, 31 Mar 2011 18:02:41 +0200, Dave Hansen wrote:
> > Holy cow, that's dense.  Is there really no more straightforward way to
> > do that?
> 
> Which part exactly is dense?  What would be qualify as a more
> straightforward way?

I'm still not 100% sure what it's trying to do.  It looks like it
attempts to check all of "start"'s buddy pages.

unsigned long find_buddy(unsigned long pfn, int buddy)
{
	unsigned long page_idx = pfn & ((1 << MAX_ORDER) - 1); // You had a macro for this I think
	unsigned long buddy_idx = __find_buddy_index(page_idx, order);
	return page_idx + buddy_idx;
}

Is something like this equivalent?

int order;
for (order = 0; order <= MAX_ORDER; order++) {
	unsigned long buddy_pfn = find_buddy(start, order);
	struct page *buddy = pfn_to_page(buddy_pfn);
	if (PageBuddy(buddy)
		break;
	WARN();
	return -EINVAL;
}

I'm wondering also if you can share some code with __rmqueue().

> > In any case, please pull the ++ret bit out of the WARN_ON().  Some
> > people like to do:
> >
> > #define WARN_ON(...) do{}while(0)
> >
> > to save space on some systems.
> 
> I don't think that's the case.  Even if WARN_ON() decides not to print
> a warning, it will still return the value of the argument.  If not,
> a lot of code will brake.

Bah, sorry.  I'm confusing WARN_ON() and WARN().

-- Dave

WARNING: multiple messages have this Message-ID (diff)
From: Dave Hansen <dave@linux.vnet.ibm.com>
To: Michal Nazarewicz <mina86@mina86.com>
Cc: Marek Szyprowski <m.szyprowski@samsung.com>,
	linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-samsung-soc@vger.kernel.org, linux-media@vger.kernel.org,
	linux-mm@kvack.org, Kyungmin Park <kyungmin.park@samsung.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
	Ankita Garg <ankita@in.ibm.com>,
	Daniel Walker <dwalker@codeaurora.org>,
	Johan MOSSBERG <johan.xx.mossberg@stericsson.com>,
	Mel Gorman <mel@csn.ul.ie>, Pawel Osciak <pawel@osciak.com>
Subject: Re: [PATCH 05/12] mm: alloc_contig_range() added
Date: Thu, 31 Mar 2011 13:28:42 -0700	[thread overview]
Message-ID: <1301603322.31087.1196.camel@nimitz> (raw)
In-Reply-To: <op.vs7umufd3l0zgt@mnazarewicz-glaptop>

On Thu, 2011-03-31 at 18:26 +0200, Michal Nazarewicz wrote:
> > On Thu, 2011-03-31 at 15:16 +0200, Marek Szyprowski wrote:
> >> +       ret = 0;
> >> +       while (!PageBuddy(pfn_to_page(start & (~0UL << ret))))
> >> +               if (WARN_ON(++ret >= MAX_ORDER))
> >> +                       return -EINVAL;
> 
> On Thu, 31 Mar 2011 18:02:41 +0200, Dave Hansen wrote:
> > Holy cow, that's dense.  Is there really no more straightforward way to
> > do that?
> 
> Which part exactly is dense?  What would be qualify as a more
> straightforward way?

I'm still not 100% sure what it's trying to do.  It looks like it
attempts to check all of "start"'s buddy pages.

unsigned long find_buddy(unsigned long pfn, int buddy)
{
	unsigned long page_idx = pfn & ((1 << MAX_ORDER) - 1); // You had a macro for this I think
	unsigned long buddy_idx = __find_buddy_index(page_idx, order);
	return page_idx + buddy_idx;
}

Is something like this equivalent?

int order;
for (order = 0; order <= MAX_ORDER; order++) {
	unsigned long buddy_pfn = find_buddy(start, order);
	struct page *buddy = pfn_to_page(buddy_pfn);
	if (PageBuddy(buddy)
		break;
	WARN();
	return -EINVAL;
}

I'm wondering also if you can share some code with __rmqueue().

> > In any case, please pull the ++ret bit out of the WARN_ON().  Some
> > people like to do:
> >
> > #define WARN_ON(...) do{}while(0)
> >
> > to save space on some systems.
> 
> I don't think that's the case.  Even if WARN_ON() decides not to print
> a warning, it will still return the value of the argument.  If not,
> a lot of code will brake.

Bah, sorry.  I'm confusing WARN_ON() and WARN().

-- Dave


  parent reply	other threads:[~2011-03-31 20:28 UTC|newest]

Thread overview: 96+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-03-31 13:15 [PATCHv9 0/12] Contiguous Memory Allocator Marek Szyprowski
2011-03-31 13:15 ` Marek Szyprowski
2011-03-31 13:15 ` Marek Szyprowski
2011-03-31 13:15 ` [PATCH 01/12] lib: bitmap: Added alignment offset for bitmap_find_next_zero_area() Marek Szyprowski
2011-03-31 13:15   ` Marek Szyprowski
2011-03-31 13:15   ` Marek Szyprowski
2011-03-31 13:15 ` [PATCH 02/12] lib: genalloc: Generic allocator improvements Marek Szyprowski
2011-03-31 13:15   ` Marek Szyprowski
2011-03-31 13:15   ` Marek Szyprowski
2011-03-31 13:15 ` [PATCH 03/12] mm: move some functions from memory_hotplug.c to page_isolation.c Marek Szyprowski
2011-03-31 13:15   ` Marek Szyprowski
2011-03-31 13:15   ` Marek Szyprowski
2011-03-31 13:16 ` [PATCH 04/12] mm: alloc_contig_freed_pages() added Marek Szyprowski
2011-03-31 13:16   ` Marek Szyprowski
2011-03-31 13:16   ` Marek Szyprowski
2011-03-31 15:58   ` Dave Hansen
2011-03-31 15:58     ` Dave Hansen
2011-03-31 15:58     ` Dave Hansen
2011-03-31 19:24     ` Steven Rostedt
2011-03-31 19:24       ` Steven Rostedt
2011-03-31 19:24       ` Steven Rostedt
2011-03-31 20:33       ` Dave Hansen
2011-03-31 20:33         ` Dave Hansen
2011-03-31 20:33         ` Dave Hansen
2011-03-31 21:09     ` Michal Nazarewicz
2011-03-31 21:09       ` Michal Nazarewicz
2011-03-31 21:09       ` Michal Nazarewicz
2011-03-31 21:14       ` Dave Hansen
2011-03-31 21:14         ` Dave Hansen
2011-03-31 21:14         ` Dave Hansen
2011-03-31 22:18         ` Michal Nazarewicz
2011-03-31 22:18           ` Michal Nazarewicz
2011-03-31 22:18           ` Michal Nazarewicz
2011-03-31 22:26           ` Dave Hansen
2011-03-31 22:26             ` Dave Hansen
2011-03-31 22:26             ` Dave Hansen
2011-03-31 22:51             ` Michal Nazarewicz
2011-03-31 22:51               ` Michal Nazarewicz
2011-03-31 22:51               ` Michal Nazarewicz
2011-04-01 14:03               ` Dave Hansen
2011-04-01 14:03                 ` Dave Hansen
2011-04-01 14:03                 ` Dave Hansen
2011-04-04 13:15                 ` Michal Nazarewicz
2011-04-04 13:15                   ` Michal Nazarewicz
2011-04-04 13:15                   ` Michal Nazarewicz
2011-04-05  7:23                   ` Marek Szyprowski
2011-04-05  7:23                     ` Marek Szyprowski
2011-04-05  7:23                     ` Marek Szyprowski
2011-03-31 13:16 ` [PATCH 05/12] mm: alloc_contig_range() added Marek Szyprowski
2011-03-31 13:16   ` Marek Szyprowski
2011-03-31 13:16   ` Marek Szyprowski
2011-03-31 16:02   ` Dave Hansen
2011-03-31 16:02     ` Dave Hansen
2011-03-31 16:02     ` Dave Hansen
2011-03-31 16:26     ` Michal Nazarewicz
2011-03-31 16:26       ` Michal Nazarewicz
2011-03-31 16:26       ` Michal Nazarewicz
2011-03-31 19:28       ` Steven Rostedt
2011-03-31 19:28         ` Steven Rostedt
2011-03-31 19:28         ` Steven Rostedt
2011-03-31 19:52         ` Michal Nazarewicz
2011-03-31 19:52           ` Michal Nazarewicz
2011-03-31 19:52           ` Michal Nazarewicz
2011-03-31 20:28       ` Dave Hansen [this message]
2011-03-31 20:28         ` Dave Hansen
2011-03-31 20:28         ` Dave Hansen
2011-03-31 21:17         ` Michal Nazarewicz
2011-03-31 21:17           ` Michal Nazarewicz
2011-03-31 21:17           ` Michal Nazarewicz
2011-03-31 19:26     ` Steven Rostedt
2011-03-31 19:26       ` Steven Rostedt
2011-03-31 19:26       ` Steven Rostedt
2011-03-31 16:04   ` Dave Hansen
2011-03-31 16:04     ` Dave Hansen
2011-03-31 16:04     ` Dave Hansen
2011-03-31 13:16 ` [PATCH 06/12] mm: cma: Contiguous Memory Allocator added Marek Szyprowski
2011-03-31 13:16   ` Marek Szyprowski
2011-03-31 13:16   ` Marek Szyprowski
2011-03-31 13:16 ` [PATCH 07/12] mm: MIGRATE_CMA migration type added Marek Szyprowski
2011-03-31 13:16   ` Marek Szyprowski
2011-03-31 13:16   ` Marek Szyprowski
2011-03-31 13:16 ` [PATCH 08/12] mm: MIGRATE_CMA isolation functions added Marek Szyprowski
2011-03-31 13:16   ` Marek Szyprowski
2011-03-31 13:16   ` Marek Szyprowski
2011-03-31 13:16 ` [PATCH 09/12] mm: MIGRATE_CMA support added to CMA Marek Szyprowski
2011-03-31 13:16   ` Marek Szyprowski
2011-03-31 13:16   ` Marek Szyprowski
2011-03-31 13:16 ` [PATCH 10/12] mm: cma: add CMA 'regions style' API (for testing) Marek Szyprowski
2011-03-31 13:16   ` Marek Szyprowski
2011-03-31 13:16   ` Marek Szyprowski
2011-03-31 13:16 ` [PATCH 11/12] v4l: videobuf2: add CMA allocator " Marek Szyprowski
2011-03-31 13:16   ` Marek Szyprowski
2011-03-31 13:16   ` Marek Szyprowski
2011-03-31 13:16 ` [PATCH 12/12] ARM: S5PC110: Added CMA regions to Aquila and Goni boards Marek Szyprowski
2011-03-31 13:16   ` Marek Szyprowski
2011-03-31 13:16   ` Marek Szyprowski

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=1301603322.31087.1196.camel@nimitz \
    --to=dave@linux.vnet.ibm.com \
    --cc=akpm@linux-foundation.org \
    --cc=ankita@in.ibm.com \
    --cc=dwalker@codeaurora.org \
    --cc=johan.xx.mossberg@stericsson.com \
    --cc=kamezawa.hiroyu@jp.fujitsu.com \
    --cc=kyungmin.park@samsung.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linux-samsung-soc@vger.kernel.org \
    --cc=m.szyprowski@samsung.com \
    --cc=mel@csn.ul.ie \
    --cc=mina86@mina86.com \
    --cc=pawel@osciak.com \
    /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.