reg: adding proc to allproc

Ferner Cilloniz fernercc at gmail.com
Sat Dec 20 18:49:44 PST 2008


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