All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Kirill A. Shutemov" <kirill@shutemov.name>
To: Shachar Raindel <raindel@mellanox.com>
Cc: linux-mm@kvack.org, kirill.shutemov@linux.intel.com,
	mgorman@suse.de, riel@redhat.com, ak@linux.intel.com,
	matthew.r.wilcox@intel.com, dave.hansen@linux.intel.com,
	n-horiguchi@ah.jp.nec.com, akpm@linux-foundation.org,
	torvalds@linux-foundation.org, haggaie@mellanox.com,
	aarcange@redhat.com, pfeiner@google.com, hannes@cmpxchg.org,
	sagig@mellanox.com, walken@google.com
Subject: Re: [PATCH 3/5] mm: refactor do_wp_page, extract the page copy flow
Date: Mon, 1 Dec 2014 14:57:54 +0200	[thread overview]
Message-ID: <20141201125754.GD13856@node.dhcp.inet.fi> (raw)
In-Reply-To: <1417435485-24629-4-git-send-email-raindel@mellanox.com>

On Mon, Dec 01, 2014 at 02:04:43PM +0200, Shachar Raindel wrote:
> In some cases, do_wp_page had to copy the page suffering a write fault
> to a new location. If the function logic decided that to do this, it
> was done by jumping with a "goto" operation to the relevant code
> block. This made the code really hard to understand. It is also
> against the kernel coding style guidelines.
> 
> This patch extracts the page copy and page table update logic to a
> separate function. It also clean up the naming, from "gotten" to
> "wp_page_copy", and adds few comments.
> 
> Signed-off-by: Shachar Raindel <raindel@mellanox.com>
> ---
>  mm/memory.c | 238 +++++++++++++++++++++++++++++++++---------------------------
>  1 file changed, 131 insertions(+), 107 deletions(-)
> 
> diff --git a/mm/memory.c b/mm/memory.c
> index dd3bb13..436012d 100644
> --- a/mm/memory.c
> +++ b/mm/memory.c
> @@ -2123,6 +2123,132 @@ static int wp_page_unlock(struct mm_struct *mm, struct vm_area_struct *vma,
>  }
>  
>  /*
> + * Handle the case of a page which we actually need to copy to a new page.
> + *
> + * High level logic flow:
> + *
> + * - Drop the PTL, allocate a page, copy the content.
> + * - Handle book keeping and accounting - cgroups, mmu-notifiers, etc.
> + * - Regain the PTL. If the pte changed, bail out and release the allocated page
> + * - If the pte is still the way we remember it, update the page table and all
> + *   relevant references. This includes dropping the reference the page-table
> + *   held to the old page, as well as updating the rmap.
> + * - In any case, unlock the PTL and drop the reference we took to the old page.
> + */
> +static int wp_page_copy(struct mm_struct *mm, struct vm_area_struct *vma,
> +			unsigned long address, pte_t *page_table, pmd_t *pmd,
> +			spinlock_t *ptl, pte_t orig_pte, struct page *old_page)
> +	__releases(ptl)
> +{
> +	struct page *new_page = NULL;
> +	pte_t entry;
> +	int page_copied = 0;
> +	const unsigned long mmun_start = address & PAGE_MASK;	/* For mmu_notifiers */
> +	const unsigned long mmun_end = mmun_start + PAGE_SIZE;	/* For mmu_notifiers */
> +	struct mem_cgroup *memcg;
> +
> +	pte_unmap_unlock(page_table, ptl);

Move ptl unlock to caller. No need in __releases(ptl) and shorter list of
argument.

Otherwise:

Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>

-- 
 Kirill A. Shutemov

--
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:[~2014-12-01 12:58 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-12-01 12:04 [PATCH 0/5] Refactor do_wp_page, no functional change Shachar Raindel
2014-12-01 12:04 ` [PATCH 1/5] mm: Refactor do_wp_page, extract the reuse case Shachar Raindel
2014-12-01 12:30   ` Kirill A. Shutemov
2014-12-01 12:34     ` Shachar Raindel
2014-12-01 12:50       ` Kirill A. Shutemov
2014-12-01 12:04 ` [PATCH 2/5] mm: Refactor do_wp_page - extract the unlock flow Shachar Raindel
2014-12-01 12:43   ` Kirill A. Shutemov
2014-12-01 12:04 ` [PATCH 3/5] mm: refactor do_wp_page, extract the page copy flow Shachar Raindel
2014-12-01 12:57   ` Kirill A. Shutemov [this message]
2014-12-01 12:04 ` [PATCH 4/5] mm: Refactor do_wp_page handling of shared vma into a function Shachar Raindel
2014-12-01 13:03   ` Kirill A. Shutemov
2014-12-01 12:04 ` [PATCH 5/5] mm: Move the MMU-notifier code from wp_page_unlock to wp_page_copy Shachar Raindel
2014-12-01 16:47 ` [PATCH 0/5] Refactor do_wp_page, no functional change Linus Torvalds
2014-12-01 16:53 ` Andi Kleen

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=20141201125754.GD13856@node.dhcp.inet.fi \
    --to=kirill@shutemov.name \
    --cc=aarcange@redhat.com \
    --cc=ak@linux.intel.com \
    --cc=akpm@linux-foundation.org \
    --cc=dave.hansen@linux.intel.com \
    --cc=haggaie@mellanox.com \
    --cc=hannes@cmpxchg.org \
    --cc=kirill.shutemov@linux.intel.com \
    --cc=linux-mm@kvack.org \
    --cc=matthew.r.wilcox@intel.com \
    --cc=mgorman@suse.de \
    --cc=n-horiguchi@ah.jp.nec.com \
    --cc=pfeiner@google.com \
    --cc=raindel@mellanox.com \
    --cc=riel@redhat.com \
    --cc=sagig@mellanox.com \
    --cc=torvalds@linux-foundation.org \
    --cc=walken@google.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.