On 25 Dec 2013, at 23:59, Ian Lepore <[email protected]> wrote: > On Wed, 2013-12-25 at 22:32 +0000, Dimitry Andric wrote: >> Author: dim >> Date: Wed Dec 25 22:32:34 2013 >> New Revision: 259893 >> URL: http://svnweb.freebsd.org/changeset/base/259893 >> >> Log: >> In sys/vm/vm_pageout.c, since vm_pageout_worker() takes a void * as >> argument, cast the incoming 0 argument to void *, to silence a warning >> from clang 3.4 ("expression which evaluates to zero treated as a null >> pointer constant of type 'void *' [-Wnon-literal-null-conversion]"). >> >> MFC after: 3 days >> >> Modified: >> head/sys/vm/vm_pageout.c >> >> Modified: head/sys/vm/vm_pageout.c >> ============================================================================== >> --- head/sys/vm/vm_pageout.c Wed Dec 25 22:14:42 2013 (r259892) >> +++ head/sys/vm/vm_pageout.c Wed Dec 25 22:32:34 2013 (r259893) >> @@ -1699,7 +1699,7 @@ vm_pageout(void) >> } >> } >> #endif >> - vm_pageout_worker((uintptr_t)0); >> + vm_pageout_worker((void *)(uintptr_t)0); >> } >> >> /* > > Why isn't the fix for this just vm_pageout_worker(NULL); ?
Because the argument is meant as a literal zero, in this case. The
vm_pageout_worker() function only has a void * argument, because it is
used as a thread function for kthread_add(9); see just a few lines
above:
error = kthread_add(vm_pageout_worker, (void *)(uintptr_t)i,
[...]
Upon entry to vm_pageout_worker(), the incoming 'pointer' is immediately
converted back into an intptr_t:
static void
vm_pageout_worker(void *arg)
{
struct vm_domain *domain;
int domidx;
domidx = (uintptr_t)arg;
[...]
-Dimitry
signature.asc
Description: Message signed with OpenPGP using GPGMail
