Date: Tue, 28 Jul 1998 05:50:57 +0200 (MET DST) From: Luigi Rizzo <luigi@labinfo.iet.unipi.it> To: julian@whistle.com (Julian Elischer) Cc: mike@smith.net.au, wollman@khavrinen.lcs.mit.edu, current@FreeBSD.ORG Subject: Re: SMP kernels... how many processes can be in ? Message-ID: <199807280350.FAA04809@labinfo.iet.unipi.it> In-Reply-To: <Pine.BSF.3.95.980727164650.6196C-100000@current1.whistle.com> from "Julian Elischer" at Jul 27, 98 04:55:39 pm
next in thread | previous in thread | raw e-mail | index | archive | help
> trouble is that there needs to be some place to store data
> on a 'packet by packet' basis, The data is generated at one point in
> processing and needed at another..
> but what if the packet gets queued in between?
that's a minor problem in a sence because the queue must have room for
the additional info in whatever form you need.
> and how do you pass the information into (for example ip_input())
> a function when the arguments of that function are alread defined and well
> known. What ever solution you have should be extensible so as to be used
> by as-yet un-thought-of users.
my idea (similar in principle to the mbuf one you propose) is to
adopt one (or a set) of special structs which the caller fills up with
all parameters it needs. The called function (say ip_input in this
case) first checks its args and if they correspond to the special
struct then operates specially. Something like
struct xyz_parms {
T a ;
T2 b ;
struct mbuf *m ;
} xyz_arg ;
In the caller:
...
xyz_arg.m = m ;
xyz_arg.a = ... '
ip_input ( struct mbuf *)&xyz_arg );
in the called fn:
ip_input(struct mbuf *m)
{
if (m == (struct mbuf *)&xyz_arg ) {
struct xyz_parms *p = (struct xyz_parms *)m ;
m = p-> m ;
/* do special processing with p->a */
}
...
My problem is, do we have multiple instances of the kernel running in
parallel, so that i need an array of xyz_arg[], one per CPU ? And if
this is the case, how do i know the CPU i am running on, so that i can
assign the right xyz_arg[i] without having to use locks to allocate
them ?
luigi
-----------------------------+--------------------------------------
Luigi Rizzo | Dip. di Ingegneria dell'Informazione
email: luigi@iet.unipi.it | Universita' di Pisa
tel: +39-50-568533 | via Diotisalvi 2, 56126 PISA (Italy)
fax: +39-50-568522 | http://www.iet.unipi.it/~luigi/
_____________________________|______________________________________
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199807280350.FAA04809>
