Date: Thu, 2 Aug 2007 13:56:34 -0400 From: Jung-uk Kim <jkim@FreeBSD.org> To: Roman Divacky <rdivacky@FreeBSD.org> Cc: perforce@FreeBSD.org Subject: Re: PERFORCE change 124529 for review Message-ID: <200708021356.58217.jkim@FreeBSD.org> In-Reply-To: <200708021130.l72BUHrY077198@repoman.freebsd.org> References: <200708021130.l72BUHrY077198@repoman.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Thursday 02 August 2007 07:30 am, Roman Divacky wrote:
> +
> +/* XXX: fake one.. waiting for ssouhlal to commit his patch */
> +int
> +linux_sched_getaffinity(struct thread *td, struct
> linux_sched_getaffinity_args *args) +{
> + int error;
> + cpumask_t i = ~0;
> +
> + if (args->len < sizeof(cpumask_t))
> + return (EINVAL);
> +
> + error = copyout(&i, args->user_mask_ptr, sizeof(cpumask_t));
> + return (error);
> +}
Er, shouldn't it be more like this?
int
linux_sched_getaffinity(struct thread *td,
struct linux_sched_getaffinity_args *args)
{
uint8_t *mask;
int error;
if (args->cpusetsize < sizeof(cpumask_t))
return (EINVAL);
mask = malloc(args->cpusetsize, M_LINUX, M_WAITOK);
memset(mask, 0xff, args->cpusetsize);
error = copyout(mask, args->mask, args->cpusetsize);
free(mask, M_LINUX);
return (error);
}
The reason is because Linux can ask longer CPU mask than FreeBSD's.
The (old) default used to be 1024-bit (128-byte) mask. So, a lot
of Linux apps still do that.
Also, can you match args to the Linux API?
int sched_getaffinity(pid_t pid, unsigned int cpusetsize, cpu_set_t *mask);
s/len/cpusetsize/
s/user_mask_ptr/mask/
Thanks,
Jung-uk Kim
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200708021356.58217.jkim>
