reg: adding proc to allproc

Ferner Cilloniz fernercc at gmail.com
Sat Dec 20 18:51:16 PST 2008


Forgot to mention. Im using the below book and /sys/kern/kern_fork.c as
references for process management.

On Sat, 2008-12-20 at 20:49 +0000, Ferner Cilloniz wrote:
> for the sake of this discussion its suffice to consider new_entry->p as
> read-only pointer because i never modify it. I am just storing its
> address. It easily just be considered an unsigned long value.
> 
> However, would really calling 
> LIST_INSERT_HEAD(&allproc, entry->p, p_list)
> 
> result in a hang of the system? I'm flipping through pages in FreeBSD
> design and implementation right now.
> 
> On Sat, 2008-12-20 at 18:05 -0800, Michelle Li wrote:
> > reg: adding proc to allproc (Ferner Cilloniz) 
> > 
> > new_entry->p .....
> >  is accessing the "read/write" pointer declared in the proc_ll struct
> > 
> > new_entry->p = p; 
> >   is attempting an assignment of a "read ONLY" const pointer that
> >   has been passed into add_proc_entry() to a "read/write" pointer
> > 
> > new_entry->"read/write pointer" = "read ONLY pointer";  
> >    is invalid
> > 
> > "new_entry->p = p; // maybe doing this assignment isnt correct?"
> >    with this assertion I agree
> > 
> > 
> > freebsd-hackers-request at freebsd.org wrote: Send freebsd-hackers mailing list submissions to
> >  freebsd-hackers at freebsd.org
> > 
> > To subscribe or unsubscribe via the World Wide Web, visit
> >  http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> > or, via email, send a message with subject or body 'help' to
> >  freebsd-hackers-request at freebsd.org
> > 
> > You can reach the person managing the list at
> >  freebsd-hackers-owner at freebsd.org
> > 
> > When replying, please edit your Subject line so it is more specific
> > than "Re: Contents of freebsd-hackers digest..."
> > 
> > 
> > Today's Topics:
> > 
> >    1. adding proc to allproc (Ferner Cilloniz)
> >    2. Re: adding proc to allproc (Julian Elischer)
> >    3. Re: adding proc to allproc (Ferner Cilloniz)
> >    4. Re: adding proc to allproc (Julian Elischer)
> >    5. Re: adding proc to allproc (Ferner Cilloniz)
> > 
> > 
> > ----------------------------------------------------------------------
> > 
> > Message: 1
> > Date: Fri, 19 Dec 2008 22:39:20 +0000
> > From: Ferner Cilloniz 
> > Subject: adding proc to allproc
> > To: freebsd-hackers at freebsd.org
> > Message-ID: <1229726360.5614.15.camel at mobiliare.Belkin>
> > Content-Type: text/plain
> > 
> > Hello everyone.
> > 
> > I am playing with freebsd and just learning some things about the
> > FreeBSD kernel. 
> > 
> > So for my first quest i am placing random processes from the allproc
> > list into a list of my own and trying to add them back into allproc
> > 
> > I have pasted the code below.
> > 
> > -----------------------------------------------------------------------
> > struct proc *p = a process from my own list;
> > if( p != NULL && (p->p_state == PRS_NEW || p->p_state == PRS_NORMAL) ){
> >        LIST_INSERT_HEAD(&allproc, p, p_list);
> > }
> > -----------------------------------------------------------------------
> > 
> > Thanks.
> > 
> > 
> > 
> > ------------------------------
> > 
> > Message: 2
> > Date: Fri, 19 Dec 2008 21:27:34 -0800
> > From: Julian Elischer 
> > Subject: Re: adding proc to allproc
> > To: Ferner Cilloniz 
> > Cc: freebsd-hackers at freebsd.org
> > Message-ID: <494C8246.3020703 at elischer.org>
> > Content-Type: text/plain; charset=ISO-8859-1; format=flowed
> > 
> > Ferner Cilloniz wrote:
> > > Hello everyone.
> > > 
> > > I am playing with freebsd and just learning some things about the
> > > FreeBSD kernel. 
> > > 
> > > So for my first quest i am placing random processes from the allproc
> > > list into a list of my own and trying to add them back into allproc
> > > 
> > > I have pasted the code below.
> > > 
> > > -----------------------------------------------------------------------
> > > struct proc *p = a process from my own list;
> > > if( p != NULL && (p->p_state == PRS_NEW || p->p_state == PRS_NORMAL) ){
> > >        LIST_INSERT_HEAD(&allproc, p, p_list);
> > > }
> > > -----------------------------------------------------------------------
> > > 
> > > Thanks.
> > 
> > and your question is?
> > 
> > 
> > > 
> > > _______________________________________________
> > > freebsd-hackers at freebsd.org mailing list
> > > http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> > > To unsubscribe, send any mail to "freebsd-hackers-unsubscribe at freebsd.org"
> > 
> > 
> > 
> > ------------------------------
> > 
> > Message: 3
> > Date: Fri, 19 Dec 2008 23:28:46 +0000
> > From: Ferner Cilloniz 
> > Subject: Re: adding proc to allproc
> > To: Julian Elischer 
> > Cc: freebsd-hackers at freebsd.org
> > Message-ID: <1229729326.5614.16.camel at mobiliare.Belkin>
> > Content-Type: text/plain
> > 
> > When i run the code from a KLD it hangs the system. No reboot occurs
> > however, it just hangs there.
> > 
> > 
> > On Fri, 2008-12-19 at 21:27 -0800, Julian Elischer wrote:
> > > Ferner Cilloniz wrote:
> > > > Hello everyone.
> > > > 
> > > > I am playing with freebsd and just learning some things about the
> > > > FreeBSD kernel. 
> > > > 
> > > > So for my first quest i am placing random processes from the allproc
> > > > list into a list of my own and trying to add them back into allproc
> > > > 
> > > > I have pasted the code below.
> > > > 
> > > > -----------------------------------------------------------------------
> > > > struct proc *p = a process from my own list;
> > > > if( p != NULL && (p->p_state == PRS_NEW || p->p_state == PRS_NORMAL) ){
> > > >        LIST_INSERT_HEAD(&allproc, p, p_list);
> > > > }
> > > > -----------------------------------------------------------------------
> > > > 
> > > > Thanks.
> > > 
> > > and your question is?
> > > 
> > > 
> > > > 
> > > > _______________________________________________
> > > > freebsd-hackers at freebsd.org mailing list
> > > > http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> > > > To unsubscribe, send any mail to "freebsd-hackers-unsubscribe at freebsd.org"
> > > 
> > -- 
> > Cilloniz Bicchi, Ferner
> > 
> > Research Assistant
> > Dept. of Computer Sciences
> > The University of Texas at Austin
> > http://www.cs.utexas.edu/~fernercc
> > fernercc at cs.utexas.edu
> > 
> > 
> > 
> > ------------------------------
> > 
> > Message: 4
> > Date: Fri, 19 Dec 2008 21:39:20 -0800
> > From: Julian Elischer 
> > Subject: Re: adding proc to allproc
> > To: Ferner Cilloniz 
> > Cc: freebsd-hackers at freebsd.org
> > Message-ID: <494C8508.2020000 at elischer.org>
> > Content-Type: text/plain; charset=ISO-8859-1; format=flowed
> > 
> > Ferner Cilloniz wrote:
> > > When i run the code from a KLD it hangs the system. No reboot occurs
> > > however, it just hangs there.
> > 
> > well, firstly you have no locking though that would probably let you 
> > get away with it most times.
> > 
> > Where does the process come from in the first place?
> > 
> > It sounds like you are making a circular list somewhere or somehow...
> > 
> > have you tried going into ddb?
> > 
> > 
> > 
> > 
> > > 
> > > 
> > > On Fri, 2008-12-19 at 21:27 -0800, Julian Elischer wrote:
> > >> Ferner Cilloniz wrote:
> > >>> Hello everyone.
> > >>>
> > >>> I am playing with freebsd and just learning some things about the
> > >>> FreeBSD kernel. 
> > >>>
> > >>> So for my first quest i am placing random processes from the allproc
> > >>> list into a list of my own and trying to add them back into allproc
> > >>>
> > >>> I have pasted the code below.
> > >>>
> > >>> -----------------------------------------------------------------------
> > >>> struct proc *p = a process from my own list;
> > >>> if( p != NULL && (p->p_state == PRS_NEW || p->p_state == PRS_NORMAL) ){
> > >>>        LIST_INSERT_HEAD(&allproc, p, p_list);
> > >>> }
> > >>> -----------------------------------------------------------------------
> > 
> > >>
> > >>> _______________________________________________
> > >>> freebsd-hackers at freebsd.org mailing list
> > >>> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> > >>> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe at freebsd.org"
> > 
> > 
> > 
> > ------------------------------
> > 
> > Message: 5
> > Date: Sat, 20 Dec 2008 02:23:20 +0000
> > From: Ferner Cilloniz 
> > Subject: Re: adding proc to allproc
> > To: Julian Elischer 
> > Cc: freebsd-hackers at freebsd.org
> > Message-ID: <1229739800.5614.24.camel at mobiliare.Belkin>
> > Content-Type: text/plain
> > 
> > The process comes from the allproc list.
> > I am simply iterating through this list and removing the first 1/2 of
> > allproc list and adding the removed process to my own singly linked
> > list.
> > 
> > LIST_REMOVE(current_proc, p_list);  // remove from the allproc
> > add_proc_entry(current_proc);
> > 
> > Later, i am iterating through my singly linked list and doing the below:
> > 
> > struct proc *p = current->p;
> > f( p != NULL && (p->p_state == PRS_NEW || p->p_state == PRS_NORMAL) ){
> >       LIST_INSERT_HEAD(&allproc, p, p_list);
> > }
> > 
> > Could this be causing a circular list?
> > 
> > I am adding the proc entries to my singly linked list as follows:
> > 
> > static void add_proc_entry(const struct proc *p)
> > {
> >     struct proc_ll *new_entry = (struct proc_ll*)malloc(sizeof(struct
> > proc_ll), M_TEMP, M_ZERO | M_NOWAIT);
> >     int done = 0;
> > 
> >     new_entry->p = p; // maybe doing this assignment isnt correct?
> > 
> >     if(proc_entries == NULL) {
> >         proc_entries = new_entry;
> >         return;
> >     }
> > 
> >     struct proc_ll *current = proc_entries;
> > 
> >     while(current != NULL) {
> >         if(current->next == NULL) {
> >             current->next = new_entry;
> >             break;
> >         }
> >         current = current->next;
> >     }
> > }
> > 
> > 
> > struct proc_ll {
> >     struct proc *p;
> >     struct proc_ll *next;
> > };
> > 
> > 
> > A circular list does sound like it could cause hanging to occur but the
> > above code, atleast from my eyes, doesn't seem to cause it.
> > 
> > On Fri, 2008-12-19 at 21:39 -0800, Julian Elischer wrote:
> > > Ferner Cilloniz wrote:
> > > > When i run the code from a KLD it hangs the system. No reboot occurs
> > > > however, it just hangs there.
> > > 
> > > well, firstly you have no locking though that would probably let you 
> > > get away with it most times.
> > > 
> > > Where does the process come from in the first place?
> > > 
> > > It sounds like you are making a circular list somewhere or somehow...
> > > 
> > > have you tried going into ddb?
> > > 
> > > 
> > > 
> > > 
> > > > 
> > > > 
> > > > On Fri, 2008-12-19 at 21:27 -0800, Julian Elischer wrote:
> > > >> Ferner Cilloniz wrote:
> > > >>> Hello everyone.
> > > >>>
> > > >>> I am playing with freebsd and just learning some things about the
> > > >>> FreeBSD kernel. 
> > > >>>
> > > >>> So for my first quest i am placing random processes from the allproc
> > > >>> list into a list of my own and trying to add them back into allproc
> > > >>>
> > > >>> I have pasted the code below.
> > > >>>
> > > >>> -----------------------------------------------------------------------
> > > >>> struct proc *p = a process from my own list;
> > > >>> if( p != NULL && (p->p_state == PRS_NEW || p->p_state == PRS_NORMAL) ){
> > > >>>        LIST_INSERT_HEAD(&allproc, p, p_list);
> > > >>> }
> > > >>> -----------------------------------------------------------------------
> > > 
> > > >>
> > > >>> _______________________________________________
> > > >>> freebsd-hackers at freebsd.org mailing list
> > > >>> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> > > >>> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe at freebsd.org"
> > > 
> > 
> > 
> > 
> > 
> > ------------------------------
> > 
> > _______________________________________________
> > freebsd-hackers at freebsd.org mailing list
> > http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> > To unsubscribe, send any mail to "freebsd-hackers-unsubscribe at freebsd.org"
> > 
> > End of freebsd-hackers Digest, Vol 299, Issue 5
> > ***********************************************
> > 
> > 
> >        
> > _______________________________________________
> > freebsd-hackers at freebsd.org mailing list
> > http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> > To unsubscribe, send any mail to "freebsd-hackers-unsubscribe at freebsd.org"
-- 
Cilloniz Bicchi, Ferner

Research Assistant
Dept. of Computer Sciences
The University of Texas at Austin
http://www.cs.utexas.edu/~fernercc
fernercc at cs.utexas.edu



More information about the freebsd-hackers mailing list