reg: adding proc to allproc (Ferner Cilloniz)
Michelle Li
michelle_li_001 at yahoo.com
Sat Dec 20 18:31:50 PST 2008
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
***********************************************
More information about the freebsd-hackers
mailing list