All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michal Simek <monstr@monstr.eu>
To: Kautuk Consul <consul.kautuk@gmail.com>
Cc: microblaze-uclinux@itee.uq.edu.au, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 07/20] microblaze/mm/fault.c: Port OOM changes to do_page_fault
Date: Fri, 30 Mar 2012 15:29:13 +0200	[thread overview]
Message-ID: <4F75B529.2070202@monstr.eu> (raw)
In-Reply-To: <1332249700-2781-1-git-send-email-consul.kautuk@gmail.com>

On 03/20/2012 02:21 PM, Kautuk Consul wrote:
> Commit d065bd810b6deb67d4897a14bfe21f8eb526ba99
> (mm: retry page fault when blocking on disk transfer) and
> commit 37b23e0525d393d48a7d59f870b3bc061a30ccdb
> (x86,mm: make pagefault killable)
>
> The above commits introduced changes into the x86 pagefault handler
> for making the page fault handler retryable as well as killable.
>
> These changes reduce the mmap_sem hold time, which is crucial
> during OOM killer invocation.
>
> Port these changes to microblaze.
>
> Signed-off-by: Kautuk Consul<consul.kautuk@gmail.com>
> ---
>   arch/microblaze/mm/fault.c |   33 ++++++++++++++++++++++++++++-----
>   1 files changed, 28 insertions(+), 5 deletions(-)
>
> diff --git a/arch/microblaze/mm/fault.c b/arch/microblaze/mm/fault.c
> index ae97d2c..60e19e6 100644
> --- a/arch/microblaze/mm/fault.c
> +++ b/arch/microblaze/mm/fault.c
> @@ -93,6 +93,8 @@ void do_page_fault(struct pt_regs *regs, unsigned long address,
>   	int code = SEGV_MAPERR;
>   	int is_write = error_code&  ESR_S;
>   	int fault;
> +	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE |
> +					 (is_write ? FAULT_FLAG_WRITE : 0);
>
>   	regs->ear = address;
>   	regs->esr = error_code;
> @@ -139,6 +141,7 @@ void do_page_fault(struct pt_regs *regs, unsigned long address,
>   		if (kernel_mode(regs)&&  !search_exception_tables(regs->pc))
>   			goto bad_area_nosemaphore;
>
> +retry:
>   		down_read(&mm->mmap_sem);
>   	}
>
> @@ -211,7 +214,11 @@ good_area:
>   	 * make sure we exit gracefully rather than endlessly redo
>   	 * the fault.
>   	 */
> -	fault = handle_mm_fault(mm, vma, address, is_write ? FAULT_FLAG_WRITE : 0);
> +	fault = handle_mm_fault(mm, vma, address, flags);
> +
> +	if ((fault&  VM_FAULT_RETRY)&&  fatal_signal_pending(current))
> +		return;
> +
>   	if (unlikely(fault&  VM_FAULT_ERROR)) {
>   		if (fault&  VM_FAULT_OOM)
>   			goto out_of_memory;
> @@ -219,11 +226,27 @@ good_area:
>   			goto do_sigbus;
>   		BUG();
>   	}
> -	if (unlikely(fault&  VM_FAULT_MAJOR))
> -		current->maj_flt++;
> -	else
> -		current->min_flt++;
> +
> +	if (flags&  FAULT_FLAG_ALLOW_RETRY) {
> +		if (unlikely(fault&  VM_FAULT_MAJOR))
> +			current->maj_flt++;
> +		else
> +			current->min_flt++;
> +		if (fault&  VM_FAULT_RETRY) {
> +			flags&= ~FAULT_FLAG_ALLOW_RETRY;
> +
> +			/*
> +			 * No need to up_read(&mm->mmap_sem) as we would
> +			 * have already released it in __lock_page_or_retry
> +			 * in mm/filemap.c.
> +			 */
> +
> +			goto retry;
> +		}
> +	}
> +
>   	up_read(&mm->mmap_sem);
> +
>   	/*
>   	 * keep track of tlb+htab misses that are good addrs but
>   	 * just need pte's created via handle_mm_fault()

it is fine.

Acked-by: Michal Simek <monstr@monstr.eu>

If this patch should go through my tree, please let me know.

Thanks,
Michal



-- 
Michal Simek, Ing. (M.Eng)
w: www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel 2.6 Microblaze Linux - http://www.monstr.eu/fdt/
Microblaze U-BOOT custodian

  reply	other threads:[~2012-03-30 13:29 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-03-20 13:21 [PATCH 07/20] microblaze/mm/fault.c: Port OOM changes to do_page_fault Kautuk Consul
2012-03-30 13:29 ` Michal Simek [this message]
2012-03-31 10:09   ` Kautuk Consul

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=4F75B529.2070202@monstr.eu \
    --to=monstr@monstr.eu \
    --cc=consul.kautuk@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=microblaze-uclinux@itee.uq.edu.au \
    /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.