Just to follow up on this, in case anyone else might try something
similar, it turns out the problem was that the translatingport used
by the thread for certain system calls has a reference to a pagetable
which is only set once. This translatingport uses a page table from
one process, and although I change the process running on the core,
the translatingport kept referring to the old page table. The
solution was to delete and remake the translating port every time I
swap processes.
-Nick
On Jul 26, 2007, at 9:07 PM, Nicolas Zea wrote:
Yes, it's repeatable, and the benchmark being used doesn't appear
to matter. I suspect it may have to do with what the registers are
holding at startup. It looks like the simulator starts running the
loader code, and maybe takes a band jump somewhere. Eventually it
tries to do a ldl using an invalid address (0x30 I believe).
Do I need to initialize the registers to any particular values
before starting up the process? I was under the impression
LiveProcess::startup() did that.
On Jul 25, 2007, at 7:11 PM, Steve Reinhardt wrote:
Can you be more specific about this page fault? Does it occur in
a repeatable spot, what kin
d of address is it, etc.
Steve
On 7/25/07, Nicolas Zea <[EMAIL PROTECTED]> wrote:
Using Alpha Syscall Emulation, I'm playing around with moving
processes from one cpu to another, as well as having "floating
processes" which do not start on any cpu until a later time. I'm
running into an issue with getting a page fault when I try to load
one of these floating processes onto a cpu. Could anyone shed some
light onto what the necessary actions to take are?
My setup has one system object with multiple cpu's within it, each
with a private l1. I have storage for these floating processes, which
are initialized to be different benchmarks in the configuration file.
Currently, I perform the following when attempting to load an
uninitialized process onto a core for the first time (where thecpu is
the cpu object I want to run the new process on):
(note: I drain the cpu first to make sure the previous process is in
a steady state)
((AlphaTC<AlphaSimpleImpl> *)(thecpu-
>threadContexts[0]))->thread-
>process = pkt->proc; // attach the process
thecpu->registerThreadContexts(); //
register the process
pkt->proc->startup(); // perform the initial
write of program data
into memory
thecpu->resume(); // resume the cpu
This seems to work, as watching the fetch shows that things are
happening, but inevitably I get a page fault. Any ideas?
-Nick
_______________________________________________
m5-users mailing list
m5-users@m5sim.org
http://m5sim.org/cgi-bin/mailman/listinfo/m5-users
_______________________________________________
m5-users mailing list
m5-users@m5sim.org
http://m5sim.org/cgi-bin/mailman/listinfo/m5-users
_______________________________________________
m5-users mailing list
m5-users@m5sim.org
http://m5sim.org/cgi-bin/mailman/listinfo/m5-users
_______________________________________________
m5-users mailing list
m5-users@m5sim.org
http://m5sim.org/cgi-bin/mailman/listinfo/m5-users