From owner-freebsd-hackers@FreeBSD.ORG Sun Dec 21 02:31:50 2008 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 320B0106564A for ; Sun, 21 Dec 2008 02:31:50 +0000 (UTC) (envelope-from michelle_li_001@yahoo.com) Received: from web65403.mail.ac4.yahoo.com (web65403.mail.ac4.yahoo.com [76.13.9.23]) by mx1.freebsd.org (Postfix) with SMTP id 8EED18FC08 for ; Sun, 21 Dec 2008 02:31:49 +0000 (UTC) (envelope-from michelle_li_001@yahoo.com) Received: (qmail 24097 invoked by uid 60001); 21 Dec 2008 02:05:06 -0000 DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.com; h=X-YMail-OSG:Received:Date:From:Subject:To:In-Reply-To:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-ID; b=lAp1Uf8M7FKXYhhQnswZrA2mVMj/cFajQFtBaMpxM7q4hsuAEEQJJYQX5aqzIvqgQAdsGgD23gRSv0vwgRBSoQogOny2J+jm61J3vCDRYf2udspEgaco4R6d/L2oPcYVrCzcBT5kzSrPQ+spLZM75hpR69yTCBL9p27EDgkcBe8=; X-YMail-OSG: gg5e6nwVM1nCQDoryBQxEGTAAc_2sj2A.XlhEPLYSNKqgZxjU1OfeiPiIZiR2jT1deqeLC.XD51ZGY9NpL6l.d5B6hYZH_jecAw82VyHrU08Wq3cG_V9SYugBxjGZfjh7kV3HsBAUguq6iGji6m9AC2w8e5N6enlSiMbrsPyl2oTvt5n.vyf1vjHbi3yZhI- Received: from [68.110.123.27] by web65403.mail.ac4.yahoo.com via HTTP; Sat, 20 Dec 2008 18:05:06 PST Date: Sat, 20 Dec 2008 18:05:06 -0800 (PST) From: Michelle Li To: freebsd-hackers@freebsd.org In-Reply-To: <20081220120017.322FA10656E1@hub.freebsd.org> MIME-Version: 1.0 Message-ID: <823694.23548.qm@web65403.mail.ac4.yahoo.com> Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-Content-Filtered-By: Mailman/MimeDel 2.1.5 Subject: reg: adding proc to allproc (Ferner Cilloniz) X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Dec 2008 02:31:50 -0000 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@freebsd.org wrote: Send freebsd-hackers mailing list submissions to freebsd-hackers@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@freebsd.org You can reach the person managing the list at freebsd-hackers-owner@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@freebsd.org Message-ID: <1229726360.5614.15.camel@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@freebsd.org Message-ID: <494C8246.3020703@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@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-hackers > To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@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@freebsd.org Message-ID: <1229729326.5614.16.camel@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@freebsd.org mailing list > > http://lists.freebsd.org/mailman/listinfo/freebsd-hackers > > To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org" > -- Cilloniz Bicchi, Ferner Research Assistant Dept. of Computer Sciences The University of Texas at Austin http://www.cs.utexas.edu/~fernercc fernercc@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@freebsd.org Message-ID: <494C8508.2020000@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@freebsd.org mailing list >>> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers >>> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@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@freebsd.org Message-ID: <1229739800.5614.24.camel@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@freebsd.org mailing list > >>> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers > >>> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org" > ------------------------------ _______________________________________________ freebsd-hackers@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org" End of freebsd-hackers Digest, Vol 299, Issue 5 ***********************************************