Where possible we will use M_LINUX malloc(9) type.

Move M_FUTEX defines to the linux_common.ko.

Differential Revision:	https://reviews.freebsd.org/D1077
Reviewed by:	emaste
This commit is contained in:
Dmitry Chagin 2015-05-24 16:14:41 +00:00
parent 82c447f562
commit e0d3ea8c65
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=283427
10 changed files with 32 additions and 31 deletions

View File

@ -98,7 +98,7 @@ linux_proc_init(struct thread *td, struct thread *newtd, int flags)
em->em_tid = newtd->td_proc->p_pid; em->em_tid = newtd->td_proc->p_pid;
pem = malloc(sizeof(*pem), M_TEMP, M_WAITOK | M_ZERO); pem = malloc(sizeof(*pem), M_LINUX, M_WAITOK | M_ZERO);
sx_init(&pem->pem_sx, "lpemlk"); sx_init(&pem->pem_sx, "lpemlk");
newtd->td_proc->p_emuldata = pem; newtd->td_proc->p_emuldata = pem;
} }
@ -134,7 +134,7 @@ linux_proc_exit(void *arg __unused, struct proc *p)
p->p_emuldata = NULL; p->p_emuldata = NULL;
sx_destroy(&pem->pem_sx); sx_destroy(&pem->pem_sx);
free(pem, M_TEMP); free(pem, M_LINUX);
} }
int int
@ -181,7 +181,7 @@ linux_common_execve(struct thread *td, struct image_args *eargs)
PROC_UNLOCK(p); PROC_UNLOCK(p);
free(em, M_TEMP); free(em, M_TEMP);
free(pem, M_TEMP); free(pem, M_LINUX);
} }
return (0); return (0);
} }

View File

@ -369,8 +369,8 @@ getdents_common(struct thread *td, struct linux_getdents64_args *args,
buflen = max(LINUX_DIRBLKSIZ, nbytes); buflen = max(LINUX_DIRBLKSIZ, nbytes);
buflen = min(buflen, MAXBSIZE); buflen = min(buflen, MAXBSIZE);
buf = malloc(buflen, M_TEMP, M_WAITOK); buf = malloc(buflen, M_LINUX, M_WAITOK);
lbuf = malloc(LINUX_MAXRECLEN, M_TEMP, M_WAITOK | M_ZERO); lbuf = malloc(LINUX_MAXRECLEN, M_LINUX, M_WAITOK | M_ZERO);
vn_lock(vp, LK_SHARED | LK_RETRY); vn_lock(vp, LK_SHARED | LK_RETRY);
aiov.iov_base = buf; aiov.iov_base = buf;
@ -521,8 +521,8 @@ getdents_common(struct thread *td, struct linux_getdents64_args *args,
VOP_UNLOCK(vp, 0); VOP_UNLOCK(vp, 0);
foffset_unlock(fp, off, 0); foffset_unlock(fp, off, 0);
fdrop(fp, td); fdrop(fp, td);
free(buf, M_TEMP); free(buf, M_LINUX);
free(lbuf, M_TEMP); free(lbuf, M_LINUX);
return (error); return (error);
} }

View File

@ -184,9 +184,6 @@ LIN_SDT_PROBE_DEFINE2(futex, release_futexes, entry, "struct thread *",
LIN_SDT_PROBE_DEFINE1(futex, release_futexes, copyin_error, "int"); LIN_SDT_PROBE_DEFINE1(futex, release_futexes, copyin_error, "int");
LIN_SDT_PROBE_DEFINE0(futex, release_futexes, return); LIN_SDT_PROBE_DEFINE0(futex, release_futexes, return);
static MALLOC_DEFINE(M_FUTEX, "futex", "Linux futexes");
static MALLOC_DEFINE(M_FUTEX_WP, "futex wp", "Linux futexes wp");
struct futex; struct futex;
struct waiting_proc { struct waiting_proc {

View File

@ -74,7 +74,7 @@ linux_getcwd(struct thread *td, struct linux_getcwd_args *args)
if (args->bufsize < 2) if (args->bufsize < 2)
return (ERANGE); return (ERANGE);
path = malloc(LINUX_PATH_MAX, M_TEMP, M_WAITOK); path = malloc(LINUX_PATH_MAX, M_LINUX, M_WAITOK);
error = kern___getcwd(td, path, UIO_SYSSPACE, args->bufsize, error = kern___getcwd(td, path, UIO_SYSSPACE, args->bufsize,
LINUX_PATH_MAX); LINUX_PATH_MAX);
@ -85,6 +85,6 @@ linux_getcwd(struct thread *td, struct linux_getcwd_args *args)
td->td_retval[0] = lenused; td->td_retval[0] = lenused;
} }
free(path, M_TEMP); free(path, M_LINUX);
return (error); return (error);
} }

View File

@ -1206,7 +1206,7 @@ linux_setgroups(struct thread *td, struct linux_setgroups_args *args)
ngrp = args->gidsetsize; ngrp = args->gidsetsize;
if (ngrp < 0 || ngrp >= ngroups_max + 1) if (ngrp < 0 || ngrp >= ngroups_max + 1)
return (EINVAL); return (EINVAL);
linux_gidset = malloc(ngrp * sizeof(*linux_gidset), M_TEMP, M_WAITOK); linux_gidset = malloc(ngrp * sizeof(*linux_gidset), M_LINUX, M_WAITOK);
error = copyin(args->grouplist, linux_gidset, ngrp * sizeof(l_gid_t)); error = copyin(args->grouplist, linux_gidset, ngrp * sizeof(l_gid_t));
if (error) if (error)
goto out; goto out;
@ -1245,7 +1245,7 @@ linux_setgroups(struct thread *td, struct linux_setgroups_args *args)
crfree(oldcred); crfree(oldcred);
error = 0; error = 0;
out: out:
free(linux_gidset, M_TEMP); free(linux_gidset, M_LINUX);
return (error); return (error);
} }
@ -1277,14 +1277,14 @@ linux_getgroups(struct thread *td, struct linux_getgroups_args *args)
ngrp = 0; ngrp = 0;
linux_gidset = malloc(bsd_gidsetsz * sizeof(*linux_gidset), linux_gidset = malloc(bsd_gidsetsz * sizeof(*linux_gidset),
M_TEMP, M_WAITOK); M_LINUX, M_WAITOK);
while (ngrp < bsd_gidsetsz) { while (ngrp < bsd_gidsetsz) {
linux_gidset[ngrp] = bsd_gidset[ngrp + 1]; linux_gidset[ngrp] = bsd_gidset[ngrp + 1];
ngrp++; ngrp++;
} }
error = copyout(linux_gidset, args->grouplist, ngrp * sizeof(l_gid_t)); error = copyout(linux_gidset, args->grouplist, ngrp * sizeof(l_gid_t));
free(linux_gidset, M_TEMP); free(linux_gidset, M_LINUX);
if (error) if (error)
return (error); return (error);

View File

@ -609,7 +609,7 @@ linux_sendto_hdrincl(struct thread *td, struct linux_sendto_args *linux_args)
linux_args->len > IP_MAXPACKET) linux_args->len > IP_MAXPACKET)
return (EINVAL); return (EINVAL);
packet = (struct ip *)malloc(linux_args->len, M_TEMP, M_WAITOK); packet = (struct ip *)malloc(linux_args->len, M_LINUX, M_WAITOK);
/* Make kernel copy of the packet to be sent */ /* Make kernel copy of the packet to be sent */
if ((error = copyin(PTRIN(linux_args->msg), packet, if ((error = copyin(PTRIN(linux_args->msg), packet,
@ -632,7 +632,7 @@ linux_sendto_hdrincl(struct thread *td, struct linux_sendto_args *linux_args)
error = linux_sendit(td, linux_args->s, &msg, linux_args->flags, error = linux_sendit(td, linux_args->s, &msg, linux_args->flags,
NULL, UIO_SYSSPACE); NULL, UIO_SYSSPACE);
goout: goout:
free(packet, M_TEMP); free(packet, M_LINUX);
return (error); return (error);
} }
@ -1119,7 +1119,7 @@ linux_sendmsg(struct thread *td, struct linux_sendmsg_args *args)
free(sa, M_SONAME); free(sa, M_SONAME);
error = ENOBUFS; error = ENOBUFS;
cmsg = malloc(CMSG_HDRSZ, M_TEMP, M_WAITOK | M_ZERO); cmsg = malloc(CMSG_HDRSZ, M_LINUX, M_WAITOK | M_ZERO);
control = m_get(M_WAITOK, MT_CONTROL); control = m_get(M_WAITOK, MT_CONTROL);
if (control == NULL) if (control == NULL)
goto bad; goto bad;
@ -1197,7 +1197,7 @@ linux_sendmsg(struct thread *td, struct linux_sendmsg_args *args)
bad: bad:
free(iov, M_IOV); free(iov, M_IOV);
if (cmsg) if (cmsg)
free(cmsg, M_TEMP); free(cmsg, M_LINUX);
return (error); return (error);
} }
@ -1270,7 +1270,7 @@ linux_recvmsg(struct thread *td, struct linux_recvmsg_args *args)
outlen = 0; outlen = 0;
if (control) { if (control) {
linux_cmsg = malloc(L_CMSG_HDRSZ, M_TEMP, M_WAITOK | M_ZERO); linux_cmsg = malloc(L_CMSG_HDRSZ, M_LINUX, M_WAITOK | M_ZERO);
msg.msg_control = mtod(control, struct cmsghdr *); msg.msg_control = mtod(control, struct cmsghdr *);
msg.msg_controllen = control->m_len; msg.msg_controllen = control->m_len;
@ -1363,7 +1363,7 @@ linux_recvmsg(struct thread *td, struct linux_recvmsg_args *args)
bad: bad:
free(iov, M_IOV); free(iov, M_IOV);
m_freem(control); m_freem(control);
free(linux_cmsg, M_TEMP); free(linux_cmsg, M_LINUX);
return (error); return (error);
} }

View File

@ -140,12 +140,12 @@ linux_sysctl(struct thread *td, struct linux_sysctl_args *args)
return (ENOTDIR); return (ENOTDIR);
} }
mib = malloc(la.nlen * sizeof(l_int), M_TEMP, M_WAITOK); mib = malloc(la.nlen * sizeof(l_int), M_LINUX, M_WAITOK);
error = copyin(PTRIN(la.name), mib, la.nlen * sizeof(l_int)); error = copyin(PTRIN(la.name), mib, la.nlen * sizeof(l_int));
if (error) { if (error) {
LIN_SDT_PROBE1(sysctl, linux_sysctl, copyin_error, error); LIN_SDT_PROBE1(sysctl, linux_sysctl, copyin_error, error);
LIN_SDT_PROBE1(sysctl, linux_sysctl, return, error); LIN_SDT_PROBE1(sysctl, linux_sysctl, return, error);
free(mib, M_TEMP); free(mib, M_LINUX);
return (error); return (error);
} }
@ -157,7 +157,7 @@ linux_sysctl(struct thread *td, struct linux_sysctl_args *args)
switch (mib[1]) { switch (mib[1]) {
case LINUX_KERN_VERSION: case LINUX_KERN_VERSION:
error = handle_string(&la, version); error = handle_string(&la, version);
free(mib, M_TEMP); free(mib, M_LINUX);
LIN_SDT_PROBE1(sysctl, linux_sysctl, return, error); LIN_SDT_PROBE1(sysctl, linux_sysctl, return, error);
return (error); return (error);
default: default:
@ -186,7 +186,7 @@ linux_sysctl(struct thread *td, struct linux_sysctl_args *args)
sbuf_delete(sb); sbuf_delete(sb);
} }
free(mib, M_TEMP); free(mib, M_LINUX);
LIN_SDT_PROBE1(sysctl, linux_sysctl, return, ENOTDIR); LIN_SDT_PROBE1(sysctl, linux_sysctl, return, ENOTDIR);
return (ENOTDIR); return (ENOTDIR);

View File

@ -171,12 +171,12 @@ linux_setgroups16(struct thread *td, struct linux_setgroups16_args *args)
LIN_SDT_PROBE1(uid16, linux_setgroups16, return, EINVAL); LIN_SDT_PROBE1(uid16, linux_setgroups16, return, EINVAL);
return (EINVAL); return (EINVAL);
} }
linux_gidset = malloc(ngrp * sizeof(*linux_gidset), M_TEMP, M_WAITOK); linux_gidset = malloc(ngrp * sizeof(*linux_gidset), M_LINUX, M_WAITOK);
error = copyin(args->gidset, linux_gidset, ngrp * sizeof(l_gid16_t)); error = copyin(args->gidset, linux_gidset, ngrp * sizeof(l_gid16_t));
if (error) { if (error) {
LIN_SDT_PROBE1(uid16, linux_setgroups16, copyin_error, error); LIN_SDT_PROBE1(uid16, linux_setgroups16, copyin_error, error);
LIN_SDT_PROBE1(uid16, linux_setgroups16, return, error); LIN_SDT_PROBE1(uid16, linux_setgroups16, return, error);
free(linux_gidset, M_TEMP); free(linux_gidset, M_LINUX);
return (error); return (error);
} }
newcred = crget(); newcred = crget();
@ -218,7 +218,7 @@ linux_setgroups16(struct thread *td, struct linux_setgroups16_args *args)
crfree(oldcred); crfree(oldcred);
error = 0; error = 0;
out: out:
free(linux_gidset, M_TEMP); free(linux_gidset, M_LINUX);
LIN_SDT_PROBE1(uid16, linux_setgroups16, return, error); LIN_SDT_PROBE1(uid16, linux_setgroups16, return, error);
return (error); return (error);
@ -259,14 +259,14 @@ linux_getgroups16(struct thread *td, struct linux_getgroups16_args *args)
ngrp = 0; ngrp = 0;
linux_gidset = malloc(bsd_gidsetsz * sizeof(*linux_gidset), linux_gidset = malloc(bsd_gidsetsz * sizeof(*linux_gidset),
M_TEMP, M_WAITOK); M_LINUX, M_WAITOK);
while (ngrp < bsd_gidsetsz) { while (ngrp < bsd_gidsetsz) {
linux_gidset[ngrp] = bsd_gidset[ngrp + 1]; linux_gidset[ngrp] = bsd_gidset[ngrp + 1];
ngrp++; ngrp++;
} }
error = copyout(linux_gidset, args->gidset, ngrp * sizeof(l_gid16_t)); error = copyout(linux_gidset, args->gidset, ngrp * sizeof(l_gid16_t));
free(linux_gidset, M_TEMP); free(linux_gidset, M_LINUX);
if (error) { if (error) {
LIN_SDT_PROBE1(uid16, linux_getgroups16, copyout_error, error); LIN_SDT_PROBE1(uid16, linux_getgroups16, copyout_error, error);
LIN_SDT_PROBE1(uid16, linux_getgroups16, return, error); LIN_SDT_PROBE1(uid16, linux_getgroups16, return, error);

View File

@ -54,6 +54,8 @@ __FBSDID("$FreeBSD$");
#include <compat/linux/linux_util.h> #include <compat/linux/linux_util.h>
MALLOC_DEFINE(M_LINUX, "linux", "Linux mode structures"); MALLOC_DEFINE(M_LINUX, "linux", "Linux mode structures");
MALLOC_DEFINE(M_FUTEX, "futex", "Linux futexes");
MALLOC_DEFINE(M_FUTEX_WP, "futex wp", "Linux futex waiting proc");
const char linux_emul_path[] = "/compat/linux"; const char linux_emul_path[] = "/compat/linux";

View File

@ -45,6 +45,8 @@
#include <sys/uio.h> #include <sys/uio.h>
MALLOC_DECLARE(M_LINUX); MALLOC_DECLARE(M_LINUX);
MALLOC_DECLARE(M_FUTEX);
MALLOC_DECLARE(M_FUTEX_WP);
extern const char linux_emul_path[]; extern const char linux_emul_path[];