uml: fix build when SLOB is enabled
Reintroduce uml_kmalloc for the benefit of UML libc code. The previous tactic of declaring __kmalloc so it could be called directly from the libc side of the house turned out to be getting too intimate with slab, and it doesn't work with slob. So, the uml_kmalloc wrapper is back. It calls kmalloc or whatever that translates into, and libc code calls it. kfree is left alone since that still works, leaving a somewhat inconsistent API. Signed-off-by: Jeff Dike <jdike@linux.intel.com> Cc: WANG Cong <xiyou.wangcong@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
这个提交包含在:
@@ -11,6 +11,7 @@
|
||||
#include <termios.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include "chan_user.h"
|
||||
#include "kern_constants.h"
|
||||
#include "os.h"
|
||||
#include "um_malloc.h"
|
||||
#include "user.h"
|
||||
|
@@ -8,7 +8,7 @@
|
||||
|
||||
static inline void *cow_malloc(int size)
|
||||
{
|
||||
return kmalloc(size, UM_GFP_KERNEL);
|
||||
return uml_kmalloc(size, UM_GFP_KERNEL);
|
||||
}
|
||||
|
||||
static inline void cow_free(void *ptr)
|
||||
|
@@ -34,7 +34,7 @@ static struct sockaddr_un *new_addr(void *name, int len)
|
||||
{
|
||||
struct sockaddr_un *sun;
|
||||
|
||||
sun = kmalloc(sizeof(struct sockaddr_un), UM_GFP_KERNEL);
|
||||
sun = uml_kmalloc(sizeof(struct sockaddr_un), UM_GFP_KERNEL);
|
||||
if (sun == NULL) {
|
||||
printk(UM_KERN_ERR "new_addr: allocation of sockaddr_un "
|
||||
"failed\n");
|
||||
@@ -83,7 +83,7 @@ static int connect_to_switch(struct daemon_data *pri)
|
||||
goto out_close;
|
||||
}
|
||||
|
||||
sun = kmalloc(sizeof(struct sockaddr_un), UM_GFP_KERNEL);
|
||||
sun = uml_kmalloc(sizeof(struct sockaddr_un), UM_GFP_KERNEL);
|
||||
if (sun == NULL) {
|
||||
printk(UM_KERN_ERR "new_addr: allocation of sockaddr_un "
|
||||
"failed\n");
|
||||
|
@@ -40,7 +40,7 @@ static void *fd_init(char *str, int device, const struct chan_opts *opts)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
data = kmalloc(sizeof(*data), UM_GFP_KERNEL);
|
||||
data = uml_kmalloc(sizeof(*data), UM_GFP_KERNEL);
|
||||
if (data == NULL)
|
||||
return NULL;
|
||||
|
||||
|
@@ -15,6 +15,7 @@
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <netinet/in.h>
|
||||
#include "kern_constants.h"
|
||||
#include "mcast.h"
|
||||
#include "net_user.h"
|
||||
#include "um_malloc.h"
|
||||
@@ -24,7 +25,7 @@ static struct sockaddr_in *new_addr(char *addr, unsigned short port)
|
||||
{
|
||||
struct sockaddr_in *sin;
|
||||
|
||||
sin = kmalloc(sizeof(struct sockaddr_in), UM_GFP_KERNEL);
|
||||
sin = uml_kmalloc(sizeof(struct sockaddr_in), UM_GFP_KERNEL);
|
||||
if (sin == NULL) {
|
||||
printk(UM_KERN_ERR "new_addr: allocation of sockaddr_in "
|
||||
"failed\n");
|
||||
|
@@ -222,7 +222,7 @@ static void change(char *dev, char *what, unsigned char *addr,
|
||||
netmask[2], netmask[3]);
|
||||
|
||||
output_len = UM_KERN_PAGE_SIZE;
|
||||
output = kmalloc(output_len, UM_GFP_KERNEL);
|
||||
output = uml_kmalloc(output_len, UM_GFP_KERNEL);
|
||||
if (output == NULL)
|
||||
printk(UM_KERN_ERR "change : failed to allocate output "
|
||||
"buffer\n");
|
||||
|
@@ -47,7 +47,7 @@ static void *port_init(char *str, int device, const struct chan_opts *opts)
|
||||
if (kern_data == NULL)
|
||||
return NULL;
|
||||
|
||||
data = kmalloc(sizeof(*data), UM_GFP_KERNEL);
|
||||
data = uml_kmalloc(sizeof(*data), UM_GFP_KERNEL);
|
||||
if (data == NULL)
|
||||
goto err;
|
||||
|
||||
|
@@ -29,7 +29,7 @@ static void *pty_chan_init(char *str, int device, const struct chan_opts *opts)
|
||||
{
|
||||
struct pty_chan *data;
|
||||
|
||||
data = kmalloc(sizeof(*data), UM_GFP_KERNEL);
|
||||
data = uml_kmalloc(sizeof(*data), UM_GFP_KERNEL);
|
||||
if (data == NULL)
|
||||
return NULL;
|
||||
|
||||
|
@@ -96,7 +96,7 @@ static int slip_tramp(char **argv, int fd)
|
||||
pid = err;
|
||||
|
||||
output_len = UM_KERN_PAGE_SIZE;
|
||||
output = kmalloc(output_len, UM_GFP_KERNEL);
|
||||
output = uml_kmalloc(output_len, UM_GFP_KERNEL);
|
||||
if (output == NULL) {
|
||||
printk(UM_KERN_ERR "slip_tramp : failed to allocate output "
|
||||
"buffer\n");
|
||||
|
@@ -29,7 +29,7 @@ static void *tty_chan_init(char *str, int device, const struct chan_opts *opts)
|
||||
}
|
||||
str++;
|
||||
|
||||
data = kmalloc(sizeof(*data), UM_GFP_KERNEL);
|
||||
data = uml_kmalloc(sizeof(*data), UM_GFP_KERNEL);
|
||||
if (data == NULL)
|
||||
return NULL;
|
||||
*data = ((struct tty_chan) { .dev = str,
|
||||
|
@@ -30,7 +30,7 @@ static void *xterm_init(char *str, int device, const struct chan_opts *opts)
|
||||
{
|
||||
struct xterm_chan *data;
|
||||
|
||||
data = kmalloc(sizeof(*data), UM_GFP_KERNEL);
|
||||
data = uml_kmalloc(sizeof(*data), UM_GFP_KERNEL);
|
||||
if (data == NULL)
|
||||
return NULL;
|
||||
*data = ((struct xterm_chan) { .pid = -1,
|
||||
|
在新工单中引用
屏蔽一个用户