Date: Fri, 28 Sep 2001 19:39:33 +1000 (EST) From: Bruce Evans <bde@zeta.org.au> To: Warner Losh <imp@harmony.village.org> Cc: <arch@FreeBSD.org> Subject: Re: Proposed change: d_thread_t for driver portability between 4.x and 5.x Message-ID: <20010928192532.M52718-100000@delplex.bde.org> In-Reply-To: <200109272330.f8RNUn776995@harmony.village.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, 27 Sep 2001, Warner Losh wrote:
> Right now I have to do some really ugly things in the pcic driver to
> make my driver portable between 4.x and 5.x. Surprising, the only
> ugly part is that stable has struct proc and current has struct thread
> for many parameters. Most drivers just shuffle these poitners around
> to various routines and don't need to look under the covers.
>
> As such, having a d_thread_t typedef would make it easier to write
> drivers that can be shared. Instead of saying struct proc *p, you'd
> say d_thread_t *p in its place. This will make it work for both
> -stable and -current without further kludges.
This breaks 2 style rules :-). From style(9):
Avoid using typedefs for structure types. Such typedefs make it impossi-
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ble for applications to use pointers to such a structure opaquely, which
is both possible and beneficial when using an ordinary struct tag. When
convention requires a typedef, make its name match the struct tag. Avoid
^^^^^
typedefs ending in ``_t'', except as specified in Standard C or by POSIX.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
These are wollman's rules, not KNF. I strongly agree with them, but we have
too many of these personal rules which not everyone agreed to.
I can see the use of d_thread_t^Hs if it is truly opaque. Declaring it
only in <sys/conf.h> or even including <sys/conf.h> breaks its opaqueness.
Unfortunately, the other rule-breaking declarations like d_open_t require
including the full <sys/conf.h> in device drivers. It's another bug
that dev_t is not either truly opaque or declared as "struct foo *".
> Here's the diffs for -current:
>
> Index: conf.h
> ===================================================================
> RCS file: /home/imp/FreeBSD/CVS/src/sys/sys/conf.h,v
> retrieving revision 1.133
> diff -u -r1.133 conf.h
> --- conf.h 2001/09/12 08:38:05 1.133
> +++ conf.h 2001/09/27 23:19:49
> @@ -114,17 +114,18 @@
> struct uio;
> struct knote;
>
> -typedef int d_open_t __P((dev_t dev, int oflags, int devtype, struct thread *td));
> -typedef int d_close_t __P((dev_t dev, int fflag, int devtype, struct thread *td));
> +typedef struct thread d_thread_t;
> +typedef int d_open_t __P((dev_t dev, int oflags, int devtype, d_thread_t *td));
> +typedef int d_close_t __P((dev_t dev, int fflag, int devtype, d_thread_t *td));
The type need/should not be opaque to the implementation, so there should
only be 1 1-line change to this file (to add a typedef).
Bruce
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-arch" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20010928192532.M52718-100000>
