Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 75e5584c authored by Jeff Dike's avatar Jeff Dike Committed by Linus Torvalds
Browse files

[PATCH] uml: use host AIO support



This patch makes UML use host AIO support when it (and
/usr/include/linux/aio_abi.h) are present.  This is only the support, with no
consumers - a consumer is coming in the next patch.

Signed-off-by: default avatarJeff Dike <jdike@addtoit.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 30f7dabb
Loading
Loading
Loading
Loading

arch/um/include/aio.h

0 → 100644
+28 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2004 Jeff Dike (jdike@karaya.com)
 * Licensed under the GPL
 */

#ifndef AIO_H__
#define AIO_H__

enum aio_type { AIO_READ, AIO_WRITE, AIO_MMAP };

struct aio_thread_reply {
	void *data;
	int err;
};

struct aio_context {
	int reply_fd;
	struct aio_context *next;
};

#define INIT_AIO_CONTEXT { .reply_fd	= -1, \
			   .next	= NULL }

extern int submit_aio(enum aio_type type, int fd, char *buf, int len,
		      unsigned long long offset, int reply_fd,
                      struct aio_context *aio);

#endif
+9 −1
Original line number Diff line number Diff line
@@ -111,7 +111,15 @@ extern struct uml_param __uml_setup_start, __uml_setup_end;

#ifndef __KERNEL__

#define __initcall(fn) static initcall_t __initcall_##fn __init_call = fn
#define __define_initcall(level,fn) \
	static initcall_t __initcall_##fn __attribute_used__ \
	__attribute__((__section__(".initcall" level ".init"))) = fn

/* Userspace initcalls shouldn't depend on anything in the kernel, so we'll
 * make them run first.
 */
#define __initcall(fn) __define_initcall("1", fn)

#define __exitcall(fn) static exitcall_t __exitcall_##fn __exit_call = fn

#define __init_call __attribute__ ((unused,__section__ (".initcall.init")))
+3 −0
Original line number Diff line number Diff line
@@ -7,12 +7,15 @@
#define __IRQ_KERN_H__

#include "linux/interrupt.h"
#include "asm/ptrace.h"

extern int um_request_irq(unsigned int irq, int fd, int type,
			  irqreturn_t (*handler)(int, void *,
						 struct pt_regs *),
			  unsigned long irqflags,  const char * devname,
			  void *dev_id);
extern int init_aio_irq(int irq, char *name,
			irqreturn_t (*handler)(int, void *, struct pt_regs *));

#endif

+30 −11
Original line number Diff line number Diff line
@@ -31,7 +31,7 @@
#include "kern_util.h"
#include "irq_user.h"
#include "irq_kern.h"

#include "os.h"

/*
 * Generic, controller-independent functions:
@@ -168,13 +168,32 @@ void __init init_IRQ(void)
	}
}

/*
 * Overrides for Emacs so that we follow Linus's tabbing style.
 * Emacs will notice this stuff at the end of the file and automatically
 * adjust the settings for this buffer only.  This must remain at the end
 * of the file.
 * ---------------------------------------------------------------------------
 * Local variables:
 * c-file-style: "linux"
 * End:
 */
int init_aio_irq(int irq, char *name, irqreturn_t (*handler)(int, void *,
							     struct pt_regs *))
{
	int fds[2], err;

	err = os_pipe(fds, 1, 1);
	if(err){
		printk("init_aio_irq - os_pipe failed, err = %d\n", -err);
		goto out;
	}

	err = um_request_irq(irq, fds[0], IRQ_READ, handler,
			     SA_INTERRUPT | SA_SAMPLE_RANDOM, name,
			     (void *) (long) fds[0]);
	if(err){
		printk("init_aio_irq - : um_request_irq failed, err = %d\n",
		       err);
		goto out_close;
	}

	err = fds[1];
	goto out;

 out_close:
	os_close_file(fds[0]);
	os_close_file(fds[1]);
 out:
	return(err);
}
+7 −3
Original line number Diff line number Diff line
@@ -3,11 +3,15 @@
# Licensed under the GPL
#

obj-y = elf_aux.o file.o process.o signal.o time.o tty.o user_syms.o drivers/ \
	sys-$(SUBARCH)/
obj-y = aio.o elf_aux.o file.o process.o signal.o time.o tty.o user_syms.o \
	drivers/ sys-$(SUBARCH)/

USER_OBJS := elf_aux.o file.o process.o signal.o time.o tty.o
USER_OBJS := aio.o elf_aux.o file.o process.o signal.o time.o tty.o

CFLAGS_user_syms.o += -DSUBARCH_$(SUBARCH)

HAVE_AIO_ABI := $(shell [ -r /usr/include/linux/aio_abi.h ] && \
	echo -DHAVE_AIO_ABI )
CFLAGS_aio.o += $(HAVE_AIO_ABI)

include arch/um/scripts/Makefile.rules
Loading