Re: [PATCH 1/1] LinuxPPS: Pulse per Second support for Linux



On Fri, 11 May 2007 23:55:37 +0200
Rodolfo Giometti <giometti@xxxxxxxxxxxx> wrote:

Hello,

here my new patch with a lot of fixes.

The only issue not still fixed is the one related with:

#define NETLINK_PPSAPI 20

I need time to resolve it.

Follows my comments and then the patch, hope now I can came back into
-mm tree again! :)

Well I suppose I could toss it in there for a bit of review-and-test. But
I'll need to drop it again because we do need to split this patch into the series
of patches, please.

You should do this earlier rather than later because it improves reviewability.

- This:

static void pps_class_release(struct class_device *cdev)
{
/* Nop??? */
}

is a bug and it earns you a nastygram from Greg. These objects must be
dynamically allocated - this is not optional.

It could be acceptable defining this function as void?

No, it needs to be a proper release function, like all the other ones
around the place.

This comes up again and again and again and I recently asked Greg to direct
me to (or to write) suitable documentation, and I think he did, but I lost
it. Greg, can you remind us please?

We have a bunch of code in random other drivers which is dependent upon
CONFIG_PPS_CLIENT_foo. The problem is that if a kernel was compiled with
CONFIG_PPS_CLIENT_foo=n and then the pps driver is later built for that
kernel, it won't actually work because lp, serial etc weren't correctly
configured when _they_ were built.

This sort of cross-module coupling is considered to be a bad thing, but
I'm not really sure it's all that important.

- Please split the patch up into a series of patches: one for pps core and
one for each of the clients (servers?): one for lp, one for serial, etc.

Try to arrange for that series of patches to build and run at each stage
of application.

Please don't lose my changes when you do so ;)

Please review the changes I made and a) stick to the same style and b) fix
up any sites which I missed.

- Please remove all the typedefs:

+typedef struct ntp_fp {
+typedef union pps_timeu {
+typedef struct pps_info {
+typedef struct pps_params {

and just use `struct ntp_fp' everywhere.

Those typedefs are defined in PPS specifications (please, see RFC 2783).

We don't use typedefs in-kernel. Please convert the code to use `struct
ntp_fp' everywhere.

For RFC compatibility to userspace you can do

#ifndef __KERNEL__
typedef struct ntp_fp ntp_fp_t;
...
#endif

- The above four structures are communicated with userspace, yes?

I believe that they will not work correctly when 32-bit userspace is
communicating with a 64-bit kernel. Alignments change and sizeof(long)
changes.

You don't want to have to write compat code. I suggest that you redo
those structures in terms of __u32, __u64, etc. You probably need to use
attribute((packed)) too, not sure.

Then let's get that part carefully reviewed (Arnd Bergmann <arnd@xxxxxxxx>
is my go-to guru on this) and please test it carefully.

Yeah, you just haven't got a chance that something as huge and as complex
as struct pps_netlink_msg will survive the 32->64 transition.

The same as above. These structure are fixed by RFC 2783.

Your answer has no relationship to my question.

The problem here is that under a 64-bit kernel we require that applications
which use this structure definition work correctly when they are compiled
to generate 32-bit code and when they are compiled to generate 64-bit code.

Furthermore we should aim to to have to code work correctly across
different version of the compiler, and when different compiler options are
used, and when altogether different compilers are used.

It is not clear to me that your definition is sufficiently defensive
against _any_ of these things.

- Please ensure that `make headers_check' passes OK (you'll hear from me if
it doesn't ;))

Done.

- Can we get rid of the private dbg, err and info macros? Surely there are
generic ones somewhere.

They are very useful to LinuxPPS users who can enable/disable them by
configuration menu.

You misunderstand. I'm not saying "remove the callsites". I'm saying
"remove the definitions".

Because we already have things like pr_debug() and pr_info(), so new code
should use those rather than reinventing them.

Plus, we already have at least 52 different implementations of "dbg" in the
tree and your 53rd one didn't compile because it clashed with someone
else's. This is the compiler sending us a message: "use the exiting
infrastructure". If that infrastructure is insufficient then let's
improve it.

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



Relevant Pages

  • Re: structs help
    ... >same name and the second compiler didn't like it. ... As I like to point out, the real problem with typedef is that it ... This is even more pronounced in the "typedef struct ..." ... time, though, I expect any programmer working on the zorgle program ...
    (comp.lang.c)
  • Re: C90 penetration
    ... If we agree on a set of digits that includes all Latin 1 alpha, ... if 'double' were indeed a typedef for a struct ... And there are a number of other reasons why making "double" a typedef ... for a struct type would make a compiler non-conforming. ...
    (comp.lang.c)
  • Re: [PATCH 00/12] x86: Cleanup idt, gdt/ldt/tss structs
    ... typedef struct gate_struct gate_desc; ... patch 6/12 ... More majordomo info at http://vger.kernel.org/majordomo-info.html ...
    (Linux-Kernel)
  • [bug] typedefed base class not visible [VC8 RTM.050727-4200]
    ... Most of it boils down to the following new compiler bug: ... typedef B::base base; ... but I'd really hate to need to refactor ALL client code.. ...
    (microsoft.public.dotnet.languages.vc)
  • Re: [Q] superfluous ids in self-referential typedef struct
    ... >My compiler complains if I do something like this ... > typedef struct superfluous_identifier { ... Reading email is like searching for food in the garbage, ...
    (comp.lang.c)