Yea, the exit() vs exit_group() distinction is relatively recent, and the initial SE-mode support predates that, which is why it isn't handled quite right. The "right answer" is indicated by the comment in exitGroupFunc... what you really want exit_group to do is identify all the other threads associated with the same Process object and halt those, but not all the threads in the system as it currently does.
Steve On Tue, Sep 1, 2009 at 8:51 AM, soumyaroop roy<[email protected]> wrote: > Oh, that is correct, Steve! > > Ok, so here's the problem: > If I were to run an SMT configuration, say, 2T-hello-gzip (both compiled > with gcc 4.3.2 built with linux kernel 2.6.X) as two workloads on a single > processor using O3 or inorder, when "hello" finishes, it kills off gzip too. > I figured that this happens because the workloads make syscalls to > exit_group instead of exit. This behavior is different for the "hello" > binary distributed with M5 because it does NOT make a syscall to exit_group > but makes a call to exit. > > regards, > Soumyaroop. > > On Tue, Sep 1, 2009 at 11:39 AM, Steve Reinhardt <[email protected]> wrote: >> >> What exactly is the problem that you're encountering? >> >> Note that syscall emulation only occurs in SE mode (that's what the SE >> stands for). The file syscall_emul.cc doesn't even get compiled if >> FULL_SYSTEM is defined. >> >> Steve >> >> On Mon, Aug 31, 2009 at 1:20 PM, soumyaroop roy<[email protected]> wrote: >> > Hello evebody, >> > >> > Here's a small observation that I made: >> > In SMT configurations for ALPHA/Linux, the first workload that finishes >> > terminates all the other workloads on the CPU because it makes the >> > system >> > call, exit_group(). This problem, however, does not surface with the >> > "hello" >> > binary checked into the repository because, I think, it is compiled with >> > an >> > older compiler toolchain (which was build with linux 2.4.3) and it makes >> > a >> > call to exit() instead of exit_group(). >> > >> > So my question is: >> > Shouldn't the exit_group() syscall be simulated by the exit() syscall in >> > SE >> > mode? Here is the diff in the source: >> > >> > diff -r e0c1c6d87649 src/sim/syscall_emul.cc >> > --- a/src/sim/syscall_emul.cc Sun Aug 23 14:19:14 2009 -0700 >> > +++ b/src/sim/syscall_emul.cc Mon Aug 31 16:18:05 2009 -0400 >> > @@ -110,12 +110,16 @@ >> > exitGroupFunc(SyscallDesc *desc, int callnum, LiveProcess *process, >> > ThreadContext *tc) >> > { >> > +#if !FULL_SYSTEM >> > + return exitFunc(desc, callnum, process, tc); >> > +#else >> > // really should just halt all thread contexts belonging to this >> > // process in case there's another process running... >> > exitSimLoop("target called exit()", >> > process->getSyscallArg(tc, 0) & 0xff); >> > >> > return 1; >> > +#endif >> > } >> > >> > regards, >> > Soumyaroop. >> > >> > -- >> > Soumyaroop Roy >> > Ph.D. Candidate >> > Department of Computer Science and Engineering >> > University of South Florida, Tampa >> > http://www.csee.usf.edu/~sroy >> > _______________________________________________ >> > m5-dev mailing list >> > [email protected] >> > http://m5sim.org/mailman/listinfo/m5-dev >> > >> > >> _______________________________________________ >> m5-dev mailing list >> [email protected] >> http://m5sim.org/mailman/listinfo/m5-dev > > > > -- > Soumyaroop Roy > Ph.D. Candidate > Department of Computer Science and Engineering > University of South Florida, Tampa > http://www.csee.usf.edu/~sroy > > _______________________________________________ > m5-dev mailing list > [email protected] > http://m5sim.org/mailman/listinfo/m5-dev > > _______________________________________________ m5-dev mailing list [email protected] http://m5sim.org/mailman/listinfo/m5-dev
