All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stephen Rothwell <sfr@canb.auug.org.au>
To: Thomas Gleixner <tglx@linutronix.de>, Ingo Molnar <mingo@elte.hu>,
	"H. Peter Anvin" <hpa@zytor.com>,
	Peter Zijlstra <peterz@infradead.org>
Cc: linux-next@vger.kernel.org, linux-kernel@vger.kernel.org,
	KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Mel Gorman <mgorman@suse.de>,
	Lee Schermerhorn <lee.schermerhorn@hp.com>
Subject: linux-next: manual merge of the tip tree with Linus' tree
Date: Wed, 10 Oct 2012 13:51:05 +1100	[thread overview]
Message-ID: <20121010135105.b45d6f8cc5b6b627446f993c@canb.auug.org.au> (raw)

[-- Attachment #1: Type: text/plain, Size: 4318 bytes --]

Hi all,

Today's linux-next merge of the tip tree got a conflict in mm/mempolicy.c
between commit 63f74ca21f1f ("mempolicy: fix refcount leak in
mpol_set_shared_policy()") from Linus' tree and commit 4d58c795f691
("mm/mpol: Check for misplaced page") from the tip tree.

I fixed it up (see below) and can carry the fix as necessary (no action
is required).

-- 
Cheers,
Stephen Rothwell                    sfr@canb.auug.org.au

diff --cc mm/mempolicy.c
index 0b78fb9,3360a8d..0000000
--- a/mm/mempolicy.c
+++ b/mm/mempolicy.c
@@@ -2170,12 -2168,116 +2203,122 @@@ mpol_shared_policy_lookup(struct shared
  	return pol;
  }
  
 +static void sp_free(struct sp_node *n)
 +{
 +	mpol_put(n->policy);
 +	kmem_cache_free(sn_cache, n);
 +}
 +
+ /**
+  * mpol_misplaced - check whether current page node is valid in policy
+  *
+  * @page   - page to be checked
+  * @vma    - vm area where page mapped
+  * @addr   - virtual address where page mapped
+  * @multi  - use multi-stage node binding
+  *
+  * Lookup current policy node id for vma,addr and "compare to" page's
+  * node id.
+  *
+  * Returns:
+  *	-1	- not misplaced, page is in the right node
+  *	node	- node id where the page should be
+  *
+  * Policy determination "mimics" alloc_page_vma().
+  * Called from fault path where we know the vma and faulting address.
+  */
+ int mpol_misplaced(struct page *page, struct vm_area_struct *vma,
+ 		   unsigned long addr, int multi)
+ {
+ 	struct mempolicy *pol;
+ 	struct zone *zone;
+ 	int curnid = page_to_nid(page);
+ 	unsigned long pgoff;
+ 	int polnid = -1;
+ 	int ret = -1;
+ 
+ 	BUG_ON(!vma);
+ 
+ 	pol = get_vma_policy(current, vma, addr);
+ 	if (!(pol->flags & MPOL_F_MOF))
+ 		goto out;
+ 
+ 	switch (pol->mode) {
+ 	case MPOL_INTERLEAVE:
+ 		BUG_ON(addr >= vma->vm_end);
+ 		BUG_ON(addr < vma->vm_start);
+ 
+ 		pgoff = vma->vm_pgoff;
+ 		pgoff += (addr - vma->vm_start) >> PAGE_SHIFT;
+ 		polnid = offset_il_node(pol, vma, pgoff);
+ 		break;
+ 
+ 	case MPOL_PREFERRED:
+ 		if (pol->flags & MPOL_F_LOCAL)
+ 			polnid = numa_node_id();
+ 		else
+ 			polnid = pol->v.preferred_node;
+ 		break;
+ 
+ 	case MPOL_BIND:
+ 		/*
+ 		 * allows binding to multiple nodes.
+ 		 * use current page if in policy nodemask,
+ 		 * else select nearest allowed node, if any.
+ 		 * If no allowed nodes, use current [!misplaced].
+ 		 */
+ 		if (node_isset(curnid, pol->v.nodes))
+ 			goto out;
+ 		(void)first_zones_zonelist(
+ 				node_zonelist(numa_node_id(), GFP_HIGHUSER),
+ 				gfp_zone(GFP_HIGHUSER),
+ 				&pol->v.nodes, &zone);
+ 		polnid = zone->node;
+ 		break;
+ 
+ 	default:
+ 		BUG();
+ 	}
+ 
+ 	/*
+ 	 * Multi-stage node selection is used in conjunction with a periodic
+ 	 * migration fault to build a temporal task<->page relation. By
+ 	 * using a two-stage filter we remove short/unlikely relations.
+ 	 *
+ 	 * Using P(p) ~ n_p / n_t as per frequentist probability, we can
+ 	 * equate a task's usage of a particular page (n_p) per total usage
+ 	 * of this page (n_t) (in a given time-span) to a probability.
+ 	 *
+ 	 * Our periodic faults will then sample this probability and getting
+ 	 * the same result twice in a row, given these samples are fully
+ 	 * independent, is then given by P(n)^2, provided our sample period
+ 	 * is sufficiently short compared to the usage pattern.
+ 	 *
+ 	 * This quadric squishes small probabilities, making it less likely
+ 	 * we act on an unlikely task<->page relation.
+ 	 *
+ 	 * NOTE: effectively we're using task-home-node<->page-node relations
+ 	 * since those are the only thing we can affect.
+ 	 *
+ 	 * NOTE: we're using task-home-node as opposed to the current node
+ 	 * the task might be running on, since the task-home-node is the
+ 	 * long-term node of this task, further reducing noise. Also see
+ 	 * task_tick_numa().
+ 	 */
+ 	if (multi && (pol->flags & MPOL_F_HOME)) {
+ 		int last_nid = page_xchg_last_nid(page, polnid);
+ 		if (last_nid != polnid)
+ 			goto out;
+ 	}
+ 
+ 	if (curnid != polnid)
+ 		ret = polnid;
+ out:
+ 	mpol_cond_put(pol);
+ 
+ 	return ret;
+ }
+ 
  static void sp_delete(struct shared_policy *sp, struct sp_node *n)
  {
  	pr_debug("deleting %lx-l%lx\n", n->start, n->end);

[-- Attachment #2: Type: application/pgp-signature, Size: 836 bytes --]

             reply	other threads:[~2012-10-10  2:51 UTC|newest]

Thread overview: 123+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-10-10  2:51 Stephen Rothwell [this message]
  -- strict thread matches above, loose matches on Subject: below --
2024-02-08  1:30 linux-next: manual merge of the tip tree with Linus' tree Stephen Rothwell
2023-10-16  1:38 Stephen Rothwell
2023-08-09  2:15 Stephen Rothwell
2023-02-15  1:08 Stephen Rothwell
2023-02-15 11:15 ` Ingo Molnar
2022-07-13  5:08 Stephen Rothwell
2022-05-09  3:59 Stephen Rothwell
2022-01-04  2:45 Stephen Rothwell
2021-10-11  2:21 Stephen Rothwell
2021-10-11 20:48 ` Borislav Petkov
2020-11-06  2:39 Stephen Rothwell
2020-11-06  2:46 ` Steven Rostedt
2020-08-12  1:21 Stephen Rothwell
2020-06-11  1:00 Stephen Rothwell
2020-06-11  0:52 Stephen Rothwell
2020-06-11 10:43 ` Thomas Gleixner
2020-06-11 11:03   ` Stephen Rothwell
2020-06-10  1:49 Stephen Rothwell
2020-06-10  1:42 Stephen Rothwell
2020-05-18  5:10 Stephen Rothwell
2020-05-18  7:12 ` Borislav Petkov
2020-01-06  2:17 Stephen Rothwell
2020-01-06  6:53 ` Ingo Molnar
2019-12-20  1:53 Stephen Rothwell
2019-12-16  2:43 Stephen Rothwell
2019-12-03  2:10 Stephen Rothwell
2019-12-03  6:57 ` Ingo Molnar
2019-12-03  8:56   ` Stephen Rothwell
2019-09-02  7:31 Stephen Rothwell
2019-09-02 18:07 ` Ingo Molnar
2019-07-29  2:00 Stephen Rothwell
2019-03-06  5:53 Stephen Rothwell
2018-10-12  2:14 Stephen Rothwell
2018-10-12  2:18 ` Kees Cook
2018-10-12 10:47   ` Ingo Molnar
2018-10-12 18:56     ` Kees Cook
2018-06-07  1:53 Stephen Rothwell
2018-02-12  1:27 Stephen Rothwell
2018-02-12  7:19 ` Ingo Molnar
2018-02-06  0:54 Stephen Rothwell
2018-02-06  9:14 ` Peter Zijlstra
2018-02-06  0:44 Stephen Rothwell
2018-02-06  0:40 Stephen Rothwell
2018-02-06 12:52 ` Mathieu Desnoyers
2018-02-06 13:55   ` Will Deacon
2018-02-06 14:06     ` Mathieu Desnoyers
2018-02-06 14:11       ` Will Deacon
2018-02-06 17:05         ` Mathieu Desnoyers
2018-02-06 17:21           ` Will Deacon
2018-02-08  7:03         ` Ingo Molnar
2018-02-08 18:56           ` Will Deacon
2018-02-08 19:04             ` Mathieu Desnoyers
2018-02-09 18:25               ` Will Deacon
2018-02-09 20:35                 ` Mathieu Desnoyers
2017-11-10  1:27 Stephen Rothwell
2017-05-22  3:27 Stephen Rothwell
2017-05-22  8:32 ` Mark Rutland
2017-05-22 21:44   ` Stephen Rothwell
2017-05-23  8:37     ` Mark Rutland
2016-02-03  0:09 Stephen Rothwell
2016-02-03  0:32 ` Toshi Kani
2015-09-18  1:12 Stephen Rothwell
2015-08-17  5:57 Stephen Rothwell
2015-07-06  0:08 Stephen Rothwell
2015-07-06  7:49 ` Paolo Bonzini
2015-07-06 21:34   ` Stephen Rothwell
2014-05-21  4:12 Stephen Rothwell
2014-05-21  4:24 ` H. Peter Anvin
2014-05-21  6:01   ` Ingo Molnar
2014-05-21  6:02     ` H. Peter Anvin
2014-05-21  6:05       ` Ingo Molnar
2014-05-21  6:10     ` Ingo Molnar
2014-05-21  4:12 Stephen Rothwell
2014-03-21  4:23 Stephen Rothwell
2014-03-21  8:47 ` Srivatsa S. Bhat
2014-02-18  3:09 Stephen Rothwell
2014-02-18  8:06 ` Hans-Christian Egtvedt
2014-02-18 14:15   ` Chen Gang
2014-01-30  1:42 Stephen Rothwell
2014-01-30  1:49 ` Andi Kleen
2014-01-30  1:58   ` Stephen Rothwell
2014-01-30  2:05     ` Andi Kleen
2014-01-28  0:43 Stephen Rothwell
2014-01-17  3:30 Stephen Rothwell
2014-01-17 17:27 ` Sören Brinkmann
2014-01-17 17:27   ` Sören Brinkmann
2013-12-16  3:18 Stephen Rothwell
2013-09-04  4:24 Stephen Rothwell
2013-07-09  4:36 Stephen Rothwell
2012-12-03  4:19 Stephen Rothwell
2012-10-16  1:00 Stephen Rothwell
2012-10-21 16:29 ` Ingo Molnar
2012-10-15  0:32 Stephen Rothwell
2012-10-10  2:45 Stephen Rothwell
2012-06-26  4:36 Stephen Rothwell
2012-06-22  5:01 Stephen Rothwell
2012-06-04  3:52 Stephen Rothwell
2012-05-22  5:44 Stephen Rothwell
2012-01-03  5:16 Stephen Rothwell
2012-01-03  5:08 Stephen Rothwell
2012-01-03  8:06 ` Ingo Molnar
2012-01-03  8:36   ` Stephen Rothwell
2011-04-14  3:14 Stephen Rothwell
2011-04-14  9:02 ` Peter Zijlstra
2011-04-14  9:25   ` Ingo Molnar
2011-04-08  5:02 Stephen Rothwell
2011-03-16  5:08 Stephen Rothwell
2011-03-16  8:50 ` Sebastian Andrzej Siewior
2011-03-16 11:02   ` Stephen Rothwell
2010-10-22  2:08 Stephen Rothwell
2010-10-06  2:47 Stephen Rothwell
2010-09-23  3:32 Stephen Rothwell
2010-07-26  3:39 Stephen Rothwell
2010-01-18  7:08 Stephen Rothwell
2010-01-18  7:50 ` Ingo Molnar
2010-01-18  8:59   ` Stephen Rothwell
2009-12-09  4:06 Stephen Rothwell
2009-09-24  4:07 Stephen Rothwell
2009-09-24  8:33 ` Ingo Molnar
2009-09-24  9:23   ` Stephen Rothwell
2009-08-19  6:07 Stephen Rothwell
2009-08-19 10:37 ` Ingo Molnar

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=20121010135105.b45d6f8cc5b6b627446f993c@canb.auug.org.au \
    --to=sfr@canb.auug.org.au \
    --cc=akpm@linux-foundation.org \
    --cc=hpa@zytor.com \
    --cc=kosaki.motohiro@jp.fujitsu.com \
    --cc=lee.schermerhorn@hp.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-next@vger.kernel.org \
    --cc=mgorman@suse.de \
    --cc=mingo@elte.hu \
    --cc=peterz@infradead.org \
    --cc=tglx@linutronix.de \
    /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.