Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 1 Feb 2011 09:00:11 +0100
From:      Hans Petter Selasky <hselasky@freebsd.org>
To:        freebsd-multimedia@freebsd.org
Cc:        Juergen Lock <nox@jelal.kn-bremen.de>
Subject:   Re: New dvb-s2 tuner, and a hack to get remaining remotes working
Message-ID:  <201102010900.11121.hselasky@freebsd.org>
In-Reply-To: <20110131212710.GA85739@triton8.kn-bremen.de>
References:  <20110131212710.GA85739@triton8.kn-bremen.de>

next in thread | previous in thread | raw e-mail | index | archive | help
--Boundary-00=_L27RNamZ1cT03VL
Content-Type: Text/Plain;
  charset="iso-8859-1"
Content-Transfer-Encoding: 7bit

On Monday 31 January 2011 22:27:10 Juergen Lock wrote:
> (also copied below) - I wasn't able to test this with the lirc
> port yet (it complained that it can't set /dev/lirc0 to O_NONBLOCK),

Can you try the attached patch and report back?

--HPS

--Boundary-00=_L27RNamZ1cT03VL
Content-Type: text/x-patch; charset="iso-8859-1"; name="non-blocking-io.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
	filename="non-blocking-io.patch"

Index: kernel/linux_file.c
===================================================================
--- kernel/linux_file.c	(revision 1701)
+++ kernel/linux_file.c	(working copy)
@@ -1,5 +1,5 @@
 /*-
- * Copyright (c) 2009-2010 Hans Petter Selasky. All rights reserved.
+ * Copyright (c) 2009-2011 Hans Petter Selasky. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -26,6 +26,8 @@
 #include <sys/mman.h>
 #include <sys/syscall.h>
 
+#include <cuse4bsd.h>
+
 struct cdev_handle *
 linux_open(int f_v4b, int fflags)
 {
@@ -96,7 +98,7 @@
 static void
 linux_fix_f_flags(struct file *fp, int fflags)
 {
-	if (fflags & O_NONBLOCK) {
+	if (fflags & CUSE_FFLAG_NONBLOCK) {
 		if (!(fp->f_flags & O_NONBLOCK))
 			fp->f_flags |= O_NONBLOCK;
 	} else {
Index: webcamd.c
===================================================================
--- webcamd.c	(revision 1701)
+++ webcamd.c	(working copy)
@@ -1,5 +1,5 @@
 /*-
- * Copyright (c) 2010 Hans Petter Selasky. All rights reserved.
+ * Copyright (c) 2010-2011 Hans Petter Selasky. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -27,6 +27,7 @@
 #include <sys/types.h>
 #include <sys/param.h>
 #include <sys/time.h>
+#include <sys/filio.h>
 
 #include <fcntl.h>
 #include <unistd.h>
@@ -237,14 +238,20 @@
 
 	handle = cuse_dev_get_per_file_handle(cdev);
 
+	/* we support blocking/non-blocking I/O */
+	if (cmd == FIONBIO)
+		return (0);
+
 	/* execute ioctl */
 	error = linux_ioctl(handle, fflags & CUSE_FFLAG_NONBLOCK,
 	    cmd, peer_data);
 
-	if (cmd == VIDIOC_QUERYBUF) {
+	if ((cmd == VIDIOC_QUERYBUF) && (error >= 0)) {
 
-		if (copy_from_user(&buf, peer_data, sizeof(buf)) != 0)
+		if (copy_from_user(&buf, peer_data, sizeof(buf)) != 0) {
+			error = -EFAULT;
 			goto done;
+		}
 
 		ptr = linux_mmap(handle, fflags, NULL,
 		    buf.length, buf.m.offset);
@@ -255,8 +262,10 @@
 			buf.m.offset = 0x80000000UL;
 		}
 
-		if (copy_to_user(peer_data, &buf, sizeof(buf)) != 0)
+		if (copy_to_user(peer_data, &buf, sizeof(buf)) != 0) {
+			error = -EFAULT;
 			goto done;
+		}
 	}
 done:
 	return (v4b_convert_error(error));

--Boundary-00=_L27RNamZ1cT03VL--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201102010900.11121.hselasky>