tech-net archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: patch make struct protosw pr_input non-variadic



On May 14,  7:11pm, campbell+netbsd-tech-net%mumble.net@localhost (Taylor R Campbell) wrote:
-- Subject: Re: patch make struct protosw pr_input non-variadic

|    Date: Sat, 14 May 2016 16:47:28 +0000
|    From: Taylor R Campbell <campbell+netbsd-tech-net%mumble.net@localhost>
| 
|       Date: Fri, 13 May 2016 23:14:13 +0000 (UTC)
|       From: christos%astron.com@localhost (Christos Zoulas)
| 
|       In article <20160513195611.GA8625@pris>,
|       Tyler Retzlaff  <rtr%netbsd.org@localhost> wrote:
|       >This patch:
|       >[...]
|       >* converts domain::dom_protosw to an array of pointers
| 
|       Why? What's the point of the extra indirection? You could just stick
|       and & in front of the array element assignment.
| 
|    [...]
|    Changing dom_protosw to be an array of pointers to struct protosw
|    instead of an array of struct protosw grants us flexibility in using
|    struct <protospecific>protosw structure and still get real type
|    checking for everything -- we simply fill dom_protosw with pointers to
|    an embedded struct protosw inside struct <protospecific>protosw.
| 
| I should add that I believe this indirection does not affect any hot
| paths.  For example, in the packet-processing path, ip_input still
| uses the direct array, which dom_protosw is an array of pointers into;
| the actual machine code in ip_input shouldn't change at all.
| 
| As far as I could tell, dom_protosw is used only in cold paths, such
| as in ip_init, in domain_attach, in route-changing ctlinput packet
| processing, &c., and only for linear scans through the whole array
| anyway.

But you are casting structs now... How is that safe?
You might as well make it an array for void *'s...

christos



Home | Main Index | Thread Index | Old Index