All of lore.kernel.org
 help / color / mirror / Atom feed
From: eliad lubovsky <eliadl@013.net>
To: Ingo Molnar <mingo@elte.hu>
Cc: linux-kernel@vger.kernel.org
Subject: Re: Handle kernel page faults using task gate
Date: Wed, 29 Jun 2005 18:43:47 +0300	[thread overview]
Message-ID: <1120059827.3354.30.camel@localhost.localdomain> (raw)
In-Reply-To: <20050629130901.GA29776@elte.hu>

"...The NT flag indicates that the previous task link field of the TSS
has been loaded with a saved TSS segment selector. If software
uses an IRET instruction to suspend the new task, the processor uses the
value in the previous task link field and the NT flag to return to the
previous task; that is, if the NT flag is set, the processor performs a
task switch to the task specified in the previous task link field."

"If the task switch was initiated with an exception, or an interrupt,
the processor sets the NT flag in the EFLAGS image stored in the new
task’s TSS;"

Intel Architecture Software Developer’s Manual Volume 3: System
Programming

Not sure I need to clear the NT flag.

my page fault handler:
static void pagefault_fn(void)
{
  unsigned int address, aligned_page_fault_address;
  struct vm_struct *area;

  /* retrieve the page fault address */ 
  __asm__("movl %%cr2,%0":"=r" (address));

  aligned_page_fault_address = ((address+PAGE_SIZE)&(~(4096-1)));

  area = find_vm_area((void*)(aligned_page_fault_address));

  /* allocate a new physical page, expand the stack size */
  expend_stack_size(area);

 // asm ("pushf; orl  $0x00004000, (%esp); popf; iret"); /* sets NT   */
 // asm ("pushf; andl $0xffffbfff, (%esp); popf; iret"); /* clears NT */
 asm ("iret");
}


On Wed, 2005-06-29 at 16:09, Ingo Molnar wrote:
> * eliad lubovsky <eliadl@013.net> wrote:
> 
> > I am trying to handle page faults exceptions in the kernel using the 
> > task gate mechanism. I succeeded to transfer the execution to my page 
> > fault handler using a new TSS and updates to the GDT and IDT tables 
> > (similar to the double fault mechanism in 2.6). After handling the 
> > fault and allocating the physical page I use the iret instruction to 
> > switch back to the previous task. The problem is that I got a double 
> > fault with the same address that cause the fault (although the 
> > physical page is allocated and mapped). Any clues?
> 
> are you clearing the 'nested task' (NT) flag of the new TSS once you 
> have switched to it?
> 
> 	Ingo


  reply	other threads:[~2005-06-29 15:39 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-06-28 22:18 Handle kernel page faults using task gate eliad lubovsky
2005-06-29 13:09 ` Ingo Molnar
2005-06-29 15:43   ` eliad lubovsky [this message]
2005-06-29 19:27   ` Ingo Molnar
2005-06-30  6:57     ` eliad lubovsky
2005-06-30  7:11       ` Ingo Molnar
2005-07-01  1:23         ` eliad lubovsky
  -- strict thread matches above, loose matches on Subject: below --
2005-06-30 16:53 Chuck Ebbert
2005-06-30 16:53 Chuck Ebbert
2005-07-01  4:40 Chuck Ebbert

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=1120059827.3354.30.camel@localhost.localdomain \
    --to=eliadl@013.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    /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.