From: Tejun Heo <htejun@gmail.com>
To: Rusty Russell <rusty@rustcorp.com.au>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
Andrew Morton <akpm@linux-foundation.org>,
linux-kernel@vger.kernel.org, Jeff Garzik <jeff@garzik.org>
Subject: Re: [PATCH 0/6] RFC: Typesafe callbacks
Date: Sun, 20 Jan 2008 21:56:47 +0900 [thread overview]
Message-ID: <4793450F.40902@gmail.com> (raw)
In-Reply-To: <200801202046.14746.rusty@rustcorp.com.au>
Rusty Russell wrote:
> Hi all,
>
> Converting to and from void * for callback functions loses type safety:
> everywhere else we expect the compiler to catch incorrect pointer types
> handed to functions.
>
> It's pretty simple to create typesafe callback functions using typeof, and
> with a little gcc trickery we can allow both old-style and typesafe callbacks
> to avoid churn on commonly-used routines.
I wasn't too convinced with only irq handler conversion but with other
things converted, I'm liking it very much. I really like the timer
conversion as casting between void * and unsigned long is annoying.
Possible improvements.
* Passing NULL as data to callback which takes non-void pointer
triggers warning. I think this should be allowed. Something like
the following?
* Allowing non-pointer integral types which fit into pointer would be
nice. It's often convenient to pass integers to simple callbacks.
The following macro kinda-sorta achieves the above two but it doesn't
consider promotion of integer types and thus is too strict. There
gotta be some way.
#define kthread_create(threadfn, data, namefmt...) ({ \
int (*_threadfn)(typeof(data)); \
void *_data; \
_threadfn = __builtin_choose_expr(!__builtin_types_compatible_p(typeof(data), typeof(NULL)), \
(threadfn), (void *)(threadfn)); \
_data = __builtin_choose_expr(sizeof(data) <= sizeof(void *), \
(void *)(unsigned long)data, (void *)data); \
__kthread_create((void *)_threadfn, _data, namefmt); \
})
Thanks.
--
tejun
next prev parent reply other threads:[~2008-01-20 12:57 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-01-20 9:46 [PATCH 0/6] RFC: Typesafe callbacks Rusty Russell
2008-01-20 9:47 ` [PATCH 1/6] typesafe: Convert stop_machine and callers Rusty Russell
2008-01-20 9:48 ` [PATCH 2/6] typesafe: kthread_create and kthread_run Rusty Russell
2008-01-20 9:50 ` [PATCH 3/6] typesafe: convert kthread users Rusty Russell
2008-01-20 9:51 ` [PATCH 4/6] typesafe: cast_if_type to allow macros functions which take more than one type Rusty Russell
2008-01-20 9:54 ` [PATCH 5/6] typesafe: request_irq and devm_request_irq Rusty Russell
2008-01-20 9:57 ` [PATCH 6/6] typesafe: timers Rusty Russell
2008-01-20 11:25 ` [PATCH 2/6] typesafe: kthread_create and kthread_run Jan Engelhardt
2008-01-20 12:07 ` Bert Wesarg
2008-01-20 16:24 ` Johannes Weiner
2008-01-20 16:43 ` Bert Wesarg
2008-01-20 22:04 ` Rusty Russell
2008-01-21 7:56 ` Bert Wesarg
2008-01-20 12:56 ` Tejun Heo [this message]
2008-01-20 13:00 ` [PATCH 0/6] RFC: Typesafe callbacks Tejun Heo
2008-01-20 22:17 ` Rusty Russell
2008-01-21 11:33 ` Rusty Russell
2008-01-21 12:38 ` Tejun Heo
2008-01-21 23:27 ` Rusty Russell
2008-01-21 23:57 ` Linus Torvalds
2008-01-22 7:16 ` Rusty Russell
2008-01-22 15:53 ` Linus Torvalds
2008-01-22 4:20 ` Andi Kleen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4793450F.40902@gmail.com \
--to=htejun@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=jeff@garzik.org \
--cc=linux-kernel@vger.kernel.org \
--cc=rusty@rustcorp.com.au \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.