tech-net archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: routing socket rou(n)ding?
On Feb 18, 2012, at 10:49 AM, Mouse wrote:
>>>> http://lkml.org/lkml/2007/4/1/50
>>> (a) That appears to be dealing with PCI support, not routing socket
>>> support. It's the routing socket macro I'm curious about.
>> If you search for both macro names, you'll discover that this Milind
>> Choudhary made a sweep through the Linux kernel, including PCI
>> support, network drivers, and so forth. If the "not invented here"
>> syndrome or whatever other reason means that you don't want to
>> consider a change made in Linux, you'll even discover that it's used
>> in APR-- see APR_ALIGN in include/apr_general.h:
>
> No, it's not that I'm uninterested in things Linux did; if Linux has
> had to address this issue, I'm interested in what they did. But you
> gave no reason to think that the message you pointed at had anything to
> do with routing sockets. Also, the macros you cite still depend on the
> relevant sizeof() to return a power of two.
>
> As for "search[ing] for both macro names", I have no convenient way to
> do that; I do not have Linux source on hand.
>
>>> (c) Your citing this in response to my question implies that Linux
>>> runs on something with sizeof(long) not a power of two. Now I'm
>>> also curious what CPU (and/or machine) that is.
>> A DEC PDP-7 had an 18-bit word size, and the PDP-10 had a 36-bit word
>> size; I'm not sure you'll find anything much newer than that.
>
> What do those have to do with sizeof(long)? I didn't say, number of
> bits in a long not a power of two,, nor even size of a long etc; I said
> sizeof(long), because that's what was relevant - the macro uses (in all
> the variants I've personally seen) sizeof(long) as the basis for its
> operations.
>
> You write that the NetBSD macro resembles
>
> #define RT_ROUNDUP2(a, n) ((a) > 0 ? (1 + (((a) - 1) | ((n) - 1))) :
> (n))
> #define RT_ROUNDUP(a) RT_ROUNDUP2((a), sizeof(uint64_t))
>
> which is basically the same thing, except it uses uint64_t; presumably
> this refers to NetBSD newer than anything I have at hand (I haven't
> tracked NetBSD source at all since the GPLv3 was accepted). This is
> technically still at risk, since, even though all divisors of 64 are
> powers of two, uint64_t may include padding bits - for example, on a
> 22-bit machine, uint64_t could have 64 significant bits and 2 padding
> bits and thus (depending on the implementors' choice for char) have
> sizeof(uint64_t) equal something like 6. (Or not provide uint64_t at
> all, since 64 bits is not a native size; that at least would fail to
> compile rather than just silently producing weird rounding.)
Those macros where changed for NetBSD-6 so that the routing messages
are identical for 32-bit and 64-bit kernels. I think targeting NetBSD with
non-power-of-2 entities is a waste of time. If and when such a machine
comes along, we can adapt to it. But I don't think it's going to be any time
soon
Home |
Main Index |
Thread Index |
Old Index