Re: [PATCH] create audio(4) symlinks

  • From: Robert Millan <rmh@xxxxxxxxxxx>
  • To: pooka@xxxxxx, rumpkernel-users@xxxxxxxxxxxxx
  • Date: Sun, 07 Jun 2015 00:56:47 +0200

Hi!

El 24/05/15 a les 15:58, Antti Kantee ha escrit:

On 24/05/15 13:33, Robert Millan wrote:
Hi

Please consider attached patch:

Add a few symlinks which are commonly expected by applications

/dev/audio -> audio0
/dev/sound -> sound0
/dev/audioctl -> audioctl0
/dev/mixer -> mixer0

Your patch adds a vfs link dependency to a dev component. vfs does not seem
necessary for audio; consider in-kernel users that could access the audio
facilities without going through /dev/audio. Can you rework your patch to use
an indirect call? See what makedevnodes does.

Attached.

--
Robert Millan
diff --git a/sys/rump/dev/lib/libaudio/audio_component.c
b/sys/rump/dev/lib/libaudio/audio_component.c
index 1e64985..a6999b7 100644
--- a/sys/rump/dev/lib/libaudio/audio_component.c
+++ b/sys/rump/dev/lib/libaudio/audio_component.c
@@ -57,13 +57,21 @@ RUMP_COMPONENT(RUMP_COMPONENT_DEV)
if ((error = rump_vfs_makedevnodes(S_IFCHR, "/dev/audio", '0',
cmaj, AUDIO_DEVICE, 4)) !=0)
panic("cannot create audio device nodes: %d", error);
+ if ((error = rump_vfs_makesymlink("audio0", "/dev/audio")) != 0)
+ panic("cannot create audio symlink: %d", error);
if ((error = rump_vfs_makedevnodes(S_IFCHR, "/dev/sound", '0',
cmaj, SOUND_DEVICE, 4)) !=0)
panic("cannot create sound device nodes: %d", error);
+ if ((error = rump_vfs_makesymlink("sound0", "/dev/sound")) != 0)
+ panic("cannot create sound symlink: %d", error);
if ((error = rump_vfs_makedevnodes(S_IFCHR, "/dev/audioctl", '0',
cmaj, AUDIOCTL_DEVICE, 4)) !=0)
panic("cannot create audioctl device nodes: %d", error);
+ if ((error = rump_vfs_makesymlink("audioctl0", "/dev/audioctl")) != 0)
+ panic("cannot create audioctl symlink: %d", error);
if ((error = rump_vfs_makedevnodes(S_IFCHR, "/dev/mixer", '0',
cmaj, MIXER_DEVICE, 4)) !=0)
panic("cannot create mixer device nodes: %d", error);
+ if ((error = rump_vfs_makesymlink("mixer0", "/dev/mixer")) != 0)
+ panic("cannot create mixer symlink: %d", error);
}
diff --git a/sys/rump/librump/rumpkern/rump.c b/sys/rump/librump/rumpkern/rump.c
index ba23771..b66ab46 100644
--- a/sys/rump/librump/rumpkern/rump.c
+++ b/sys/rump/librump/rumpkern/rump.c
@@ -125,6 +125,7 @@ int (*rump_vfs_makeonedevnode)(dev_t, const char *,
devmajor_t, devminor_t) = (void *)nullop;
int (*rump_vfs_makedevnodes)(dev_t, const char *, char,
devmajor_t, devminor_t, int) = (void *)nullop;
+int (*rump_vfs_makesymlink)(const char *, const char *) = (void *)nullop;

rump_proc_vfs_init_fn rump_proc_vfs_init = (void *)nullop;
rump_proc_vfs_release_fn rump_proc_vfs_release = (void *)nullop;
diff --git a/sys/rump/librump/rumpvfs/devnodes.c
b/sys/rump/librump/rumpvfs/devnodes.c
index 1982f37..7dbb33b 100644
--- a/sys/rump/librump/rumpvfs/devnodes.c
+++ b/sys/rump/librump/rumpvfs/devnodes.c
@@ -87,6 +87,12 @@ makedevnodes(dev_t devtype, const char *basename, char
minchar,
return error;
}

+static int
+makesymlink(const char *dst, const char *src)
+{
+ return do_sys_symlink(dst, src, UIO_SYSSPACE);
+}
+
enum { NOTEXIST, SAME, DIFFERENT };
static int
doesitexist(const char *path, bool isblk, devmajor_t dmaj, devminor_t dmin)
@@ -177,6 +183,7 @@ rump_vfs_builddevs(struct devsw_conv *dcvec, size_t
dcvecsize)

rump_vfs_makeonedevnode = makeonedevnode;
rump_vfs_makedevnodes = makedevnodes;
+ rump_vfs_makesymlink = makesymlink;

for (i = 0; i < dcvecsize; i++) {
dc = &dcvec[i];
diff --git a/sys/rump/librump/rumpvfs/rump_vfs_private.h
b/sys/rump/librump/rumpvfs/rump_vfs_private.h
index 770b7ee..891f182 100644
--- a/sys/rump/librump/rumpvfs/rump_vfs_private.h
+++ b/sys/rump/librump/rumpvfs/rump_vfs_private.h
@@ -50,6 +50,7 @@ extern int (*rump_vfs_makeonedevnode)(dev_t, const char *,
devmajor_t, devminor_t);
extern int (*rump_vfs_makedevnodes)(dev_t, const char *, char,
devmajor_t, devminor_t, int);
+extern int (*rump_vfs_makesymlink)(const char *, const char *);
extern void (*rump_vfs_drainbufs)(int);
extern void (*rump_vfs_fini)(void);

Other related posts: