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