svn commit: r265282 - in projects/random_number_generator: . bin/dd lib/libutil release/doc/en_US.ISO8859-1/hardware release/doc/share/misc share/man/man4 sys/dev/drm2/radeon sys/fs/msdosfs sys/mod...
Mark Murray
markm at FreeBSD.org
Sat May 3 17:39:08 UTC 2014
Author: markm
Date: Sat May 3 17:39:03 2014
New Revision: 265282
URL: http://svnweb.freebsd.org/changeset/base/265282
Log:
MFC - tracking commit.
Merging r265260 through r265281.
Modified:
projects/random_number_generator/Makefile.inc1
projects/random_number_generator/bin/dd/conv.c
projects/random_number_generator/bin/dd/dd.h
projects/random_number_generator/lib/libutil/kinfo_getfile.3
projects/random_number_generator/release/doc/en_US.ISO8859-1/hardware/article.xml
projects/random_number_generator/release/doc/share/misc/dev.archlist.txt
projects/random_number_generator/share/man/man4/mpr.4
projects/random_number_generator/share/man/man4/rsu.4
projects/random_number_generator/share/man/man4/urtwn.4
projects/random_number_generator/sys/dev/drm2/radeon/radeon_drv.c
projects/random_number_generator/sys/dev/drm2/radeon/radeon_ioc32.c
projects/random_number_generator/sys/fs/msdosfs/msdosfs_vnops.c
projects/random_number_generator/sys/modules/drm2/radeonkms/Makefile
projects/random_number_generator/sys/net/route.c
projects/random_number_generator/sys/net/route.h
projects/random_number_generator/sys/netinet/in_rmx.c
projects/random_number_generator/sys/netinet6/in6_ifattach.c
projects/random_number_generator/tools/tools/nanobsd/nanobsd.sh
projects/random_number_generator/usr.bin/ssh-copy-id/ssh-copy-id.sh
projects/random_number_generator/usr.bin/top/machine.c
Directory Properties:
projects/random_number_generator/ (props changed)
projects/random_number_generator/lib/libutil/ (props changed)
projects/random_number_generator/share/man/man4/ (props changed)
projects/random_number_generator/sys/ (props changed)
Modified: projects/random_number_generator/Makefile.inc1
==============================================================================
--- projects/random_number_generator/Makefile.inc1 Sat May 3 17:33:30 2014 (r265281)
+++ projects/random_number_generator/Makefile.inc1 Sat May 3 17:39:03 2014 (r265282)
@@ -1001,7 +1001,7 @@ buildkernel:
cd ${KRNLCONFDIR}; \
PATH=${TMPPATH} \
config ${CONFIGARGS} -d ${KRNLOBJDIR}/${_kernel} \
- -I ${KERNCONFDIR} ${KERNCONFDIR}/${_kernel}
+ -I '${KERNCONFDIR}' '${KERNCONFDIR}/${_kernel}'
.endif
.if !defined(NO_CLEAN) && !defined(NO_KERNELCLEAN)
@echo
@@ -1816,7 +1816,7 @@ DTBOUTPUTPATH= ${KRNLOBJDIR}/${KERNCONF}
.if !defined(FDT_DTS_FILE) || empty(FDT_DTS_FILE)
.if exists(${KERNCONFDIR}/${KERNCONF})
FDT_DTS_FILE!= awk 'BEGIN {FS="="} /^makeoptions[[:space:]]+FDT_DTS_FILE/ {print $$2}' \
- ${KERNCONFDIR}/${KERNCONF} ; echo
+ '${KERNCONFDIR}/${KERNCONF}' ; echo
.endif
.endif
Modified: projects/random_number_generator/bin/dd/conv.c
==============================================================================
--- projects/random_number_generator/bin/dd/conv.c Sat May 3 17:33:30 2014 (r265281)
+++ projects/random_number_generator/bin/dd/conv.c Sat May 3 17:39:03 2014 (r265282)
@@ -74,7 +74,7 @@ def(void)
dd_out(0);
/*
- * Ddout copies the leftover output to the beginning of
+ * dd_out copies the leftover output to the beginning of
* the buffer and resets the output buffer. Reset the
* input buffer to match it.
*/
Modified: projects/random_number_generator/bin/dd/dd.h
==============================================================================
--- projects/random_number_generator/bin/dd/dd.h Sat May 3 17:33:30 2014 (r265281)
+++ projects/random_number_generator/bin/dd/dd.h Sat May 3 17:39:03 2014 (r265282)
@@ -41,7 +41,7 @@ typedef struct {
/* XXX ssize_t? */
size_t dbcnt; /* current buffer byte count */
size_t dbrcnt; /* last read byte count */
- size_t dbsz; /* buffer size */
+ size_t dbsz; /* block size */
#define ISCHR 0x01 /* character device (warn on short) */
#define ISPIPE 0x02 /* pipe-like (see position.c) */
Modified: projects/random_number_generator/lib/libutil/kinfo_getfile.3
==============================================================================
--- projects/random_number_generator/lib/libutil/kinfo_getfile.3 Sat May 3 17:33:30 2014 (r265281)
+++ projects/random_number_generator/lib/libutil/kinfo_getfile.3 Sat May 3 17:39:03 2014 (r265282)
@@ -48,7 +48,7 @@ field contains the process identifier.
This should be the a process that you have privilege to access.
The
.Ar cntp
-field is allows the caller to know how many records are returned.
+field allows the caller to know how many records are returned.
.Pp
This function is a wrapper around
.Xr sysctl 3
Modified: projects/random_number_generator/release/doc/en_US.ISO8859-1/hardware/article.xml
==============================================================================
--- projects/random_number_generator/release/doc/en_US.ISO8859-1/hardware/article.xml Sat May 3 17:33:30 2014 (r265281)
+++ projects/random_number_generator/release/doc/en_US.ISO8859-1/hardware/article.xml Sat May 3 17:39:03 2014 (r265282)
@@ -1012,6 +1012,8 @@
&hwlist.ral;
+ &hwlist.rsu;
+
&hwlist.rum;
&hwlist.run;
@@ -1024,6 +1026,8 @@
&hwlist.urtw;
+ &hwlist.urtwn;
+
<para>[&arch.amd64;, &arch.i386;, &arch.pc98;] Lucent
Technologies WaveLAN/IEEE 802.11b wireless network adapters
and workalikes using the Lucent Hermes, Intersil PRISM-II,
Modified: projects/random_number_generator/release/doc/share/misc/dev.archlist.txt
==============================================================================
--- projects/random_number_generator/release/doc/share/misc/dev.archlist.txt Sat May 3 17:33:30 2014 (r265281)
+++ projects/random_number_generator/release/doc/share/misc/dev.archlist.txt Sat May 3 17:39:03 2014 (r265282)
@@ -108,6 +108,7 @@ qlxgbe amd64
qlxge amd64
rc i386
ral i386,amd64
+rsu i386,amd64
rue i386,pc98,amd64
rum i386,amd64
run i386,amd64
Modified: projects/random_number_generator/share/man/man4/mpr.4
==============================================================================
--- projects/random_number_generator/share/man/man4/mpr.4 Sat May 3 17:33:30 2014 (r265281)
+++ projects/random_number_generator/share/man/man4/mpr.4 Sat May 3 17:39:03 2014 (r265282)
@@ -66,7 +66,7 @@ controllers.
.Sh HARDWARE
The following controllers are supported by the
.Nm
-driver
+driver:
.Pp
.Bl -bullet -compact
.It
Modified: projects/random_number_generator/share/man/man4/rsu.4
==============================================================================
--- projects/random_number_generator/share/man/man4/rsu.4 Sat May 3 17:33:30 2014 (r265281)
+++ projects/random_number_generator/share/man/man4/rsu.4 Sat May 3 17:39:03 2014 (r265282)
@@ -15,7 +15,7 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
-.Dd July 29 2013
+.Dd May 3, 2014
.Dt RSU 4
.Os
.Sh NAME
@@ -40,7 +40,8 @@ place the following line in
if_rsu_load="YES"
.Ed
.Pp
-After you have read the license in /usr/share/doc/legal/realtek
+After you have read the license in
+.Pa /usr/share/doc/legal/realtek
you will want to add the following lines to
.Xr loader.conf 5 :
.Bd -literal -offset indent
@@ -93,18 +94,19 @@ due to serious weaknesses in it.
The
.Nm
driver can be configured at runtime with
-.Xr ifconfig 8
-or on boot with
-.Xr hostname 1 .
+.Xr ifconfig 8 .
.Sh FILES
The driver needs at least version 1.2 of the following firmware file,
which is loaded when an interface is attached:
.Pp
.Bl -tag -width Ds -offset indent -compact
-.It /boot/kernel/rsu-rtl8712fw.ko
+.It Pa /boot/kernel/rsu-rtl8712fw.ko
.El
.Sh HARDWARE
-The following adapters should work:
+The
+.Nm
+driver provices support for Realtek RTL8188SU/RTL8192SU USB IEEE 802.11b/g/n
+wireless network adapters, including:
.Pp
.Bl -tag -width Ds -offset indent -compact
.It ASUS USB-N10
@@ -149,14 +151,15 @@ The driver will reset the hardware.
This should not happen.
.El
.Sh SEE ALSO
-.Xr hostname 1 ,
.Xr intro 1 ,
-.Xr usb 3 ,
+.Xr usb 4 ,
.Xr netintro 4 ,
.Xr rsufw 4 ,
.Xr wlan 4 ,
.Xr arp 8 ,
-.Xr ifconfig 8
+.Xr hostapd 8 ,
+.Xr ifconfig 8 ,
+.Xr wpa_supplicant 8
.Sh HISTORY
The
.Nm
Modified: projects/random_number_generator/share/man/man4/urtwn.4
==============================================================================
--- projects/random_number_generator/share/man/man4/urtwn.4 Sat May 3 17:33:30 2014 (r265281)
+++ projects/random_number_generator/share/man/man4/urtwn.4 Sat May 3 17:39:03 2014 (r265282)
@@ -14,7 +14,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd April 25, 2014
+.Dd May 3, 2014
.Dt URTWN 4
.Os
.Sh NAME
@@ -80,7 +80,10 @@ must be agreed by adding the following l
firmware license
.El
.Sh HARDWARE
-The following adapters should work:
+The
+.Nm
+driver supports Realtek RTL8188CU/RTL8188EU/RTL8192CU based USB
+IEEE 802.11b/g/n wireless network adapters, including:
.Pp
.Bl -tag -width Ds -offset indent -compact
.It ASUS USB-N10 NANO
@@ -122,9 +125,9 @@ The driver will reset the hardware.
This should not happen.
.El
.Sh SEE ALSO
-.Xr urtwnfw 4 ,
.Xr intro 4 ,
.Xr netintro 4 ,
+.Xr urtwnfw 4 ,
.Xr usb 4 ,
.Xr wlan 4 ,
.Xr wlan_ccmp 4 ,
Modified: projects/random_number_generator/sys/dev/drm2/radeon/radeon_drv.c
==============================================================================
--- projects/random_number_generator/sys/dev/drm2/radeon/radeon_drv.c Sat May 3 17:33:30 2014 (r265281)
+++ projects/random_number_generator/sys/dev/drm2/radeon/radeon_drv.c Sat May 3 17:39:03 2014 (r265282)
@@ -85,6 +85,10 @@ extern int radeon_get_crtc_scanoutpos(st
int *vpos, int *hpos);
extern struct drm_ioctl_desc radeon_ioctls_kms[];
extern int radeon_max_kms_ioctl;
+#ifdef COMPAT_FREEBSD32
+extern struct drm_ioctl_desc radeon_compat_ioctls[];
+extern int radeon_num_compat_ioctls;
+#endif
#ifdef DUMBBELL_WIP
int radeon_mmap(struct file *filp, struct vm_area_struct *vma);
#endif /* DUMBBELL_WIP */
@@ -466,6 +470,10 @@ radeon_attach(device_t kdev)
if (radeon_modeset == 1) {
kms_driver.driver_features |= DRIVER_MODESET;
kms_driver.max_ioctl = radeon_max_kms_ioctl;
+#ifdef COMPAT_FREEBSD32
+ kms_driver.compat_ioctls = radeon_compat_ioctls;
+ kms_driver.compat_ioctls_nr = &radeon_num_compat_ioctls;
+#endif
radeon_register_atpx_handler();
}
dev->driver = &kms_driver;
Modified: projects/random_number_generator/sys/dev/drm2/radeon/radeon_ioc32.c
==============================================================================
--- projects/random_number_generator/sys/dev/drm2/radeon/radeon_ioc32.c Sat May 3 17:33:30 2014 (r265281)
+++ projects/random_number_generator/sys/dev/drm2/radeon/radeon_ioc32.c Sat May 3 17:39:03 2014 (r265282)
@@ -31,10 +31,13 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
-#include <linux/compat.h>
+#include "opt_compat.h"
-#include <drm/drmP.h>
-#include <drm/radeon_drm.h>
+#ifdef COMPAT_FREEBSD32
+
+#include <dev/drm2/drmP.h>
+#include <dev/drm2/drm.h>
+#include <dev/drm2/radeon/radeon_drm.h>
#include "radeon_drv.h"
typedef struct drm_radeon_init32 {
@@ -60,42 +63,37 @@ typedef struct drm_radeon_init32 {
u32 gart_textures_offset;
} drm_radeon_init32_t;
-static int compat_radeon_cp_init(struct file *file, unsigned int cmd,
- unsigned long arg)
+static int compat_radeon_cp_init(struct drm_device *dev, void *arg,
+ struct drm_file *file_priv)
{
- drm_radeon_init32_t init32;
- drm_radeon_init_t __user *init;
+ drm_radeon_init32_t *init32;
+ drm_radeon_init_t __user init;
- if (copy_from_user(&init32, (void __user *)arg, sizeof(init32)))
- return -EFAULT;
+ init32 = arg;
- init = compat_alloc_user_space(sizeof(*init));
- if (!access_ok(VERIFY_WRITE, init, sizeof(*init))
- || __put_user(init32.func, &init->func)
- || __put_user(init32.sarea_priv_offset, &init->sarea_priv_offset)
- || __put_user(init32.is_pci, &init->is_pci)
- || __put_user(init32.cp_mode, &init->cp_mode)
- || __put_user(init32.gart_size, &init->gart_size)
- || __put_user(init32.ring_size, &init->ring_size)
- || __put_user(init32.usec_timeout, &init->usec_timeout)
- || __put_user(init32.fb_bpp, &init->fb_bpp)
- || __put_user(init32.front_offset, &init->front_offset)
- || __put_user(init32.front_pitch, &init->front_pitch)
- || __put_user(init32.back_offset, &init->back_offset)
- || __put_user(init32.back_pitch, &init->back_pitch)
- || __put_user(init32.depth_bpp, &init->depth_bpp)
- || __put_user(init32.depth_offset, &init->depth_offset)
- || __put_user(init32.depth_pitch, &init->depth_pitch)
- || __put_user(init32.fb_offset, &init->fb_offset)
- || __put_user(init32.mmio_offset, &init->mmio_offset)
- || __put_user(init32.ring_offset, &init->ring_offset)
- || __put_user(init32.ring_rptr_offset, &init->ring_rptr_offset)
- || __put_user(init32.buffers_offset, &init->buffers_offset)
- || __put_user(init32.gart_textures_offset,
- &init->gart_textures_offset))
- return -EFAULT;
+ init.func = init32->func;
+ init.sarea_priv_offset = (unsigned long)init32->sarea_priv_offset;
+ init.is_pci = init32->is_pci;
+ init.cp_mode = init32->cp_mode;
+ init.gart_size = init32->gart_size;
+ init.ring_size = init32->ring_size;
+ init.usec_timeout = init32->usec_timeout;
+ init.fb_bpp = init32->fb_bpp;
+ init.front_offset = init32->front_offset;
+ init.front_pitch = init32->front_pitch;
+ init.back_offset = init32->back_offset;
+ init.back_pitch = init32->back_pitch;
+ init.depth_bpp = init32->depth_bpp;
+ init.depth_offset = init32->depth_offset;
+ init.depth_pitch = init32->depth_pitch;
+ init.fb_offset = (unsigned long)init32->fb_offset;
+ init.mmio_offset = (unsigned long)init32->mmio_offset;
+ init.ring_offset = (unsigned long)init32->ring_offset;
+ init.ring_rptr_offset = (unsigned long)init32->ring_rptr_offset;
+ init.buffers_offset = (unsigned long)init32->buffers_offset;
+ init.gart_textures_offset = (unsigned long)init32->gart_textures_offset;
- return drm_ioctl(file, DRM_IOCTL_RADEON_CP_INIT, (unsigned long)init);
+ return radeon_cp_init(dev, &init, file_priv);
}
typedef struct drm_radeon_clear32 {
@@ -107,50 +105,37 @@ typedef struct drm_radeon_clear32 {
u32 depth_boxes;
} drm_radeon_clear32_t;
-static int compat_radeon_cp_clear(struct file *file, unsigned int cmd,
- unsigned long arg)
+static int compat_radeon_cp_clear(struct drm_device *dev, void *arg,
+ struct drm_file *file_priv)
{
- drm_radeon_clear32_t clr32;
- drm_radeon_clear_t __user *clr;
+ drm_radeon_clear32_t *clr32;
+ drm_radeon_clear_t __user clr;
- if (copy_from_user(&clr32, (void __user *)arg, sizeof(clr32)))
- return -EFAULT;
+ clr32 = arg;
- clr = compat_alloc_user_space(sizeof(*clr));
- if (!access_ok(VERIFY_WRITE, clr, sizeof(*clr))
- || __put_user(clr32.flags, &clr->flags)
- || __put_user(clr32.clear_color, &clr->clear_color)
- || __put_user(clr32.clear_depth, &clr->clear_depth)
- || __put_user(clr32.color_mask, &clr->color_mask)
- || __put_user(clr32.depth_mask, &clr->depth_mask)
- || __put_user((void __user *)(unsigned long)clr32.depth_boxes,
- &clr->depth_boxes))
- return -EFAULT;
+ clr.flags = clr32->flags;
+ clr.clear_color = clr32->clear_color;
+ clr.clear_depth = clr32->clear_depth;
+ clr.color_mask = clr32->color_mask;
+ clr.depth_mask = clr32->depth_mask;
+ clr.depth_boxes = (drm_radeon_clear_rect_t *)(unsigned long)clr32->depth_boxes;
- return drm_ioctl(file, DRM_IOCTL_RADEON_CLEAR, (unsigned long)clr);
+ return radeon_ioctls[DRM_IOCTL_RADEON_CLEAR].func(dev, &clr, file_priv);
}
typedef struct drm_radeon_stipple32 {
u32 mask;
} drm_radeon_stipple32_t;
-static int compat_radeon_cp_stipple(struct file *file, unsigned int cmd,
- unsigned long arg)
+static int compat_radeon_cp_stipple(struct drm_device *dev, void *arg,
+ struct drm_file *file_priv)
{
drm_radeon_stipple32_t __user *argp = (void __user *)arg;
- drm_radeon_stipple_t __user *request;
- u32 mask;
+ drm_radeon_stipple_t __user request;
- if (get_user(mask, &argp->mask))
- return -EFAULT;
+ request.mask = (unsigned int *)(unsigned long)argp->mask;
- request = compat_alloc_user_space(sizeof(*request));
- if (!access_ok(VERIFY_WRITE, request, sizeof(*request))
- || __put_user((unsigned int __user *)(unsigned long)mask,
- &request->mask))
- return -EFAULT;
-
- return drm_ioctl(file, DRM_IOCTL_RADEON_STIPPLE, (unsigned long)request);
+ return radeon_ioctls[DRM_IOCTL_RADEON_STIPPLE].func(dev, &request, file_priv);
}
typedef struct drm_radeon_tex_image32 {
@@ -168,43 +153,32 @@ typedef struct drm_radeon_texture32 {
u32 image;
} drm_radeon_texture32_t;
-static int compat_radeon_cp_texture(struct file *file, unsigned int cmd,
- unsigned long arg)
+static int compat_radeon_cp_texture(struct drm_device *dev, void *arg,
+ struct drm_file *file_priv)
{
- drm_radeon_texture32_t req32;
- drm_radeon_texture_t __user *request;
- drm_radeon_tex_image32_t img32;
- drm_radeon_tex_image_t __user *image;
-
- if (copy_from_user(&req32, (void __user *)arg, sizeof(req32)))
- return -EFAULT;
- if (req32.image == 0)
+ drm_radeon_texture32_t *req32;
+ drm_radeon_texture_t __user request;
+ drm_radeon_tex_image32_t *img32;
+ drm_radeon_tex_image_t __user image;
+
+ req32 = arg;
+ if (req32->image == 0)
return -EINVAL;
- if (copy_from_user(&img32, (void __user *)(unsigned long)req32.image,
- sizeof(img32)))
- return -EFAULT;
-
- request = compat_alloc_user_space(sizeof(*request) + sizeof(*image));
- if (!access_ok(VERIFY_WRITE, request,
- sizeof(*request) + sizeof(*image)))
- return -EFAULT;
- image = (drm_radeon_tex_image_t __user *) (request + 1);
-
- if (__put_user(req32.offset, &request->offset)
- || __put_user(req32.pitch, &request->pitch)
- || __put_user(req32.format, &request->format)
- || __put_user(req32.width, &request->width)
- || __put_user(req32.height, &request->height)
- || __put_user(image, &request->image)
- || __put_user(img32.x, &image->x)
- || __put_user(img32.y, &image->y)
- || __put_user(img32.width, &image->width)
- || __put_user(img32.height, &image->height)
- || __put_user((const void __user *)(unsigned long)img32.data,
- &image->data))
- return -EFAULT;
+ img32 = (drm_radeon_tex_image32_t *)(unsigned long)req32->image;
- return drm_ioctl(file, DRM_IOCTL_RADEON_TEXTURE, (unsigned long)request);
+ request.offset = req32->offset;
+ request.pitch = req32->pitch;
+ request.format = req32->format;
+ request.width = req32->width;
+ request.height = req32->height;
+ request.image = ℑ
+ image.x = img32->x;
+ image.y = img32->y;
+ image.width = img32->width;
+ image.height = img32->height;
+ image.data = (void *)(unsigned long)img32->data;
+
+ return radeon_ioctls[DRM_IOCTL_RADEON_TEXTURE].func(dev, &request, file_priv);
}
typedef struct drm_radeon_vertex2_32 {
@@ -216,28 +190,22 @@ typedef struct drm_radeon_vertex2_32 {
u32 prim;
} drm_radeon_vertex2_32_t;
-static int compat_radeon_cp_vertex2(struct file *file, unsigned int cmd,
- unsigned long arg)
+static int compat_radeon_cp_vertex2(struct drm_device *dev, void *arg,
+ struct drm_file *file_priv)
{
- drm_radeon_vertex2_32_t req32;
- drm_radeon_vertex2_t __user *request;
+ drm_radeon_vertex2_32_t *req32;
+ drm_radeon_vertex2_t __user request;
- if (copy_from_user(&req32, (void __user *)arg, sizeof(req32)))
- return -EFAULT;
+ req32 = arg;
- request = compat_alloc_user_space(sizeof(*request));
- if (!access_ok(VERIFY_WRITE, request, sizeof(*request))
- || __put_user(req32.idx, &request->idx)
- || __put_user(req32.discard, &request->discard)
- || __put_user(req32.nr_states, &request->nr_states)
- || __put_user((void __user *)(unsigned long)req32.state,
- &request->state)
- || __put_user(req32.nr_prims, &request->nr_prims)
- || __put_user((void __user *)(unsigned long)req32.prim,
- &request->prim))
- return -EFAULT;
+ request.idx = req32->idx;
+ request.discard = req32->discard;
+ request.nr_states = req32->nr_states;
+ request.state = (drm_radeon_state_t *)(unsigned long)req32->state;
+ request.nr_prims = req32->nr_prims;
+ request.prim = (drm_radeon_prim_t *)(unsigned long)req32->prim;
- return drm_ioctl(file, DRM_IOCTL_RADEON_VERTEX2, (unsigned long)request);
+ return radeon_ioctls[DRM_IOCTL_RADEON_VERTEX2].func(dev, &request, file_priv);
}
typedef struct drm_radeon_cmd_buffer32 {
@@ -247,26 +215,20 @@ typedef struct drm_radeon_cmd_buffer32 {
u32 boxes;
} drm_radeon_cmd_buffer32_t;
-static int compat_radeon_cp_cmdbuf(struct file *file, unsigned int cmd,
- unsigned long arg)
+static int compat_radeon_cp_cmdbuf(struct drm_device *dev, void *arg,
+ struct drm_file *file_priv)
{
- drm_radeon_cmd_buffer32_t req32;
- drm_radeon_cmd_buffer_t __user *request;
+ drm_radeon_cmd_buffer32_t *req32;
+ drm_radeon_cmd_buffer_t __user request;
- if (copy_from_user(&req32, (void __user *)arg, sizeof(req32)))
- return -EFAULT;
+ req32 = arg;
- request = compat_alloc_user_space(sizeof(*request));
- if (!access_ok(VERIFY_WRITE, request, sizeof(*request))
- || __put_user(req32.bufsz, &request->bufsz)
- || __put_user((void __user *)(unsigned long)req32.buf,
- &request->buf)
- || __put_user(req32.nbox, &request->nbox)
- || __put_user((void __user *)(unsigned long)req32.boxes,
- &request->boxes))
- return -EFAULT;
+ request.bufsz = req32->bufsz;
+ request.buf = (char *)(unsigned long)req32->buf;
+ request.nbox = req32->nbox;
+ request.boxes = (struct drm_clip_rect *)(unsigned long)req32->boxes;
- return drm_ioctl(file, DRM_IOCTL_RADEON_CMDBUF, (unsigned long)request);
+ return radeon_ioctls[DRM_IOCTL_RADEON_CMDBUF].func(dev, &request, file_priv);
}
typedef struct drm_radeon_getparam32 {
@@ -274,23 +236,18 @@ typedef struct drm_radeon_getparam32 {
u32 value;
} drm_radeon_getparam32_t;
-static int compat_radeon_cp_getparam(struct file *file, unsigned int cmd,
- unsigned long arg)
+static int compat_radeon_cp_getparam(struct drm_device *dev, void *arg,
+ struct drm_file *file_priv)
{
- drm_radeon_getparam32_t req32;
- drm_radeon_getparam_t __user *request;
+ drm_radeon_getparam32_t *req32;
+ drm_radeon_getparam_t __user request;
- if (copy_from_user(&req32, (void __user *)arg, sizeof(req32)))
- return -EFAULT;
+ req32 = arg;
- request = compat_alloc_user_space(sizeof(*request));
- if (!access_ok(VERIFY_WRITE, request, sizeof(*request))
- || __put_user(req32.param, &request->param)
- || __put_user((void __user *)(unsigned long)req32.value,
- &request->value))
- return -EFAULT;
+ request.param = req32->param;
+ request.value = (void *)(unsigned long)req32->value;
- return drm_ioctl(file, DRM_IOCTL_RADEON_GETPARAM, (unsigned long)request);
+ return radeon_ioctls[DRM_IOCTL_RADEON_GETPARAM].func(dev, &request, file_priv);
}
typedef struct drm_radeon_mem_alloc32 {
@@ -300,129 +257,71 @@ typedef struct drm_radeon_mem_alloc32 {
u32 region_offset; /* offset from start of fb or GART */
} drm_radeon_mem_alloc32_t;
-static int compat_radeon_mem_alloc(struct file *file, unsigned int cmd,
- unsigned long arg)
+static int compat_radeon_mem_alloc(struct drm_device *dev, void *arg,
+ struct drm_file *file_priv)
{
- drm_radeon_mem_alloc32_t req32;
- drm_radeon_mem_alloc_t __user *request;
+ drm_radeon_mem_alloc32_t *req32;
+ drm_radeon_mem_alloc_t __user request;
- if (copy_from_user(&req32, (void __user *)arg, sizeof(req32)))
- return -EFAULT;
+ req32 = arg;
- request = compat_alloc_user_space(sizeof(*request));
- if (!access_ok(VERIFY_WRITE, request, sizeof(*request))
- || __put_user(req32.region, &request->region)
- || __put_user(req32.alignment, &request->alignment)
- || __put_user(req32.size, &request->size)
- || __put_user((int __user *)(unsigned long)req32.region_offset,
- &request->region_offset))
- return -EFAULT;
+ request.region = req32->region;
+ request.alignment = req32->alignment;
+ request.size = req32->size;
+ request.region_offset = (int *)(unsigned long)req32->region_offset;
- return drm_ioctl(file, DRM_IOCTL_RADEON_ALLOC, (unsigned long)request);
+ return radeon_mem_alloc(dev, &request, file_priv);
}
typedef struct drm_radeon_irq_emit32 {
u32 irq_seq;
} drm_radeon_irq_emit32_t;
-static int compat_radeon_irq_emit(struct file *file, unsigned int cmd,
- unsigned long arg)
+static int compat_radeon_irq_emit(struct drm_device *dev, void *arg,
+ struct drm_file *file_priv)
{
- drm_radeon_irq_emit32_t req32;
- drm_radeon_irq_emit_t __user *request;
+ drm_radeon_irq_emit32_t *req32;
+ drm_radeon_irq_emit_t __user request;
- if (copy_from_user(&req32, (void __user *)arg, sizeof(req32)))
- return -EFAULT;
+ req32 = arg;
- request = compat_alloc_user_space(sizeof(*request));
- if (!access_ok(VERIFY_WRITE, request, sizeof(*request))
- || __put_user((int __user *)(unsigned long)req32.irq_seq,
- &request->irq_seq))
- return -EFAULT;
+ request.irq_seq = (int *)(unsigned long)req32->irq_seq;
- return drm_ioctl(file, DRM_IOCTL_RADEON_IRQ_EMIT, (unsigned long)request);
+ return radeon_irq_emit(dev, &request, file_priv);
}
/* The two 64-bit arches where alignof(u64)==4 in 32-bit code */
-#if defined (CONFIG_X86_64) || defined(CONFIG_IA64)
typedef struct drm_radeon_setparam32 {
int param;
u64 value;
} __attribute__((packed)) drm_radeon_setparam32_t;
-static int compat_radeon_cp_setparam(struct file *file, unsigned int cmd,
- unsigned long arg)
+static int compat_radeon_cp_setparam(struct drm_device *dev, void *arg,
+ struct drm_file *file_priv)
{
- drm_radeon_setparam32_t req32;
- drm_radeon_setparam_t __user *request;
-
- if (copy_from_user(&req32, (void __user *) arg, sizeof(req32)))
- return -EFAULT;
+ drm_radeon_setparam32_t *req32;
+ drm_radeon_setparam_t __user request;
- request = compat_alloc_user_space(sizeof(*request));
- if (!access_ok(VERIFY_WRITE, request, sizeof(*request))
- || __put_user(req32.param, &request->param)
- || __put_user((void __user *)(unsigned long)req32.value,
- &request->value))
- return -EFAULT;
+ req32 = arg;
- return drm_ioctl(file, DRM_IOCTL_RADEON_SETPARAM, (unsigned long) request);
-}
-#else
-#define compat_radeon_cp_setparam NULL
-#endif /* X86_64 || IA64 */
-
-static drm_ioctl_compat_t *radeon_compat_ioctls[] = {
- [DRM_RADEON_CP_INIT] = compat_radeon_cp_init,
- [DRM_RADEON_CLEAR] = compat_radeon_cp_clear,
- [DRM_RADEON_STIPPLE] = compat_radeon_cp_stipple,
- [DRM_RADEON_TEXTURE] = compat_radeon_cp_texture,
- [DRM_RADEON_VERTEX2] = compat_radeon_cp_vertex2,
- [DRM_RADEON_CMDBUF] = compat_radeon_cp_cmdbuf,
- [DRM_RADEON_GETPARAM] = compat_radeon_cp_getparam,
- [DRM_RADEON_SETPARAM] = compat_radeon_cp_setparam,
- [DRM_RADEON_ALLOC] = compat_radeon_mem_alloc,
- [DRM_RADEON_IRQ_EMIT] = compat_radeon_irq_emit,
+ request.param = req32->param;
+ request.value = req32->value;
+
+ return radeon_ioctls[DRM_IOCTL_RADEON_SETPARAM].func(dev, &request, file_priv);
+}
+
+struct drm_ioctl_desc radeon_compat_ioctls[] = {
+ DRM_IOCTL_DEF(DRM_RADEON_CP_INIT, compat_radeon_cp_init, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+ DRM_IOCTL_DEF(DRM_RADEON_CLEAR, compat_radeon_cp_clear, DRM_AUTH),
+ DRM_IOCTL_DEF(DRM_RADEON_STIPPLE, compat_radeon_cp_stipple, DRM_AUTH),
+ DRM_IOCTL_DEF(DRM_RADEON_TEXTURE, compat_radeon_cp_texture, DRM_AUTH),
+ DRM_IOCTL_DEF(DRM_RADEON_VERTEX2, compat_radeon_cp_vertex2, DRM_AUTH),
+ DRM_IOCTL_DEF(DRM_RADEON_CMDBUF, compat_radeon_cp_cmdbuf, DRM_AUTH),
+ DRM_IOCTL_DEF(DRM_RADEON_GETPARAM, compat_radeon_cp_getparam, DRM_AUTH),
+ DRM_IOCTL_DEF(DRM_RADEON_SETPARAM, compat_radeon_cp_setparam, DRM_AUTH),
+ DRM_IOCTL_DEF(DRM_RADEON_ALLOC, compat_radeon_mem_alloc, DRM_AUTH),
+ DRM_IOCTL_DEF(DRM_RADEON_IRQ_EMIT, compat_radeon_irq_emit, DRM_AUTH)
};
+int radeon_num_compat_ioctls = DRM_ARRAY_SIZE(radeon_compat_ioctls);
-/**
- * Called whenever a 32-bit process running under a 64-bit kernel
- * performs an ioctl on /dev/dri/card<n>.
- *
- * \param filp file pointer.
- * \param cmd command.
- * \param arg user argument.
- * \return zero on success or negative number on failure.
- */
-long radeon_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
-{
- unsigned int nr = DRM_IOCTL_NR(cmd);
- drm_ioctl_compat_t *fn = NULL;
- int ret;
-
- if (nr < DRM_COMMAND_BASE)
- return drm_compat_ioctl(filp, cmd, arg);
-
- if (nr < DRM_COMMAND_BASE + DRM_ARRAY_SIZE(radeon_compat_ioctls))
- fn = radeon_compat_ioctls[nr - DRM_COMMAND_BASE];
-
- if (fn != NULL)
- ret = (*fn) (filp, cmd, arg);
- else
- ret = drm_ioctl(filp, cmd, arg);
-
- return ret;
-}
-
-long radeon_kms_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
-{
- unsigned int nr = DRM_IOCTL_NR(cmd);
- int ret;
-
- if (nr < DRM_COMMAND_BASE)
- return drm_compat_ioctl(filp, cmd, arg);
-
- ret = drm_ioctl(filp, cmd, arg);
-
- return ret;
-}
+#endif
Modified: projects/random_number_generator/sys/fs/msdosfs/msdosfs_vnops.c
==============================================================================
--- projects/random_number_generator/sys/fs/msdosfs/msdosfs_vnops.c Sat May 3 17:33:30 2014 (r265281)
+++ projects/random_number_generator/sys/fs/msdosfs/msdosfs_vnops.c Sat May 3 17:39:03 2014 (r265282)
@@ -1240,6 +1240,17 @@ abortit:
VOP_UNLOCK(fvp, 0);
goto bad;
}
+ /*
+ * If ip is for a directory, then its name should always
+ * be "." since it is for the directory entry in the
+ * directory itself (msdosfs_lookup() always translates
+ * to the "." entry so as to get a unique denode, except
+ * for the root directory there are different
+ * complications). However, we just corrupted its name
+ * to pass the correct name to createde(). Undo this.
+ */
+ if ((ip->de_Attributes & ATTR_DIRECTORY) != 0)
+ bcopy(oldname, ip->de_Name, 11);
ip->de_refcnt++;
zp->de_fndoffset = from_diroffset;
error = removede(zp, ip);
Modified: projects/random_number_generator/sys/modules/drm2/radeonkms/Makefile
==============================================================================
--- projects/random_number_generator/sys/modules/drm2/radeonkms/Makefile Sat May 3 17:33:30 2014 (r265281)
+++ projects/random_number_generator/sys/modules/drm2/radeonkms/Makefile Sat May 3 17:39:03 2014 (r265282)
@@ -88,7 +88,10 @@ SRCS += \
si.c \
si_blit_shaders.c
-#radeon_ioc32.c
+.if ${MACHINE_CPUARCH} == "amd64"
+SRCS += radeon_ioc32.c
+.endif
+
#radeon_prime.c
#--radeon_trace_points.c
Modified: projects/random_number_generator/sys/net/route.c
==============================================================================
--- projects/random_number_generator/sys/net/route.c Sat May 3 17:33:30 2014 (r265281)
+++ projects/random_number_generator/sys/net/route.c Sat May 3 17:39:03 2014 (r265282)
@@ -402,15 +402,6 @@ rtalloc1_fib(struct sockaddr *dst, int r
int needlock;
KASSERT((fibnum < rt_numfibs), ("rtalloc1_fib: bad fibnum"));
- switch (dst->sa_family) {
- case AF_INET6:
- case AF_INET:
- /* We support multiple FIBs. */
- break;
- default:
- fibnum = RT_DEFAULT_FIB;
- break;
- }
rnh = rt_tables_get_rnh(fibnum, dst->sa_family);
newrt = NULL;
if (rnh == NULL)
@@ -898,7 +889,7 @@ rt_getifa_fib(struct rt_addrinfo *info,
* The route must be locked.
*/
int
-rtexpunge(struct rtentry *rt)
+rt_expunge(struct radix_node_head *rnh, struct rtentry *rt)
{
#if !defined(RADIX_MPATH)
struct radix_node *rn;
@@ -907,17 +898,10 @@ rtexpunge(struct rtentry *rt)
int fib;
struct rtentry *rt0;
#endif
- struct radix_node_head *rnh;
struct ifaddr *ifa;
int error = 0;
- /*
- * Find the correct routing tree to use for this Address Family
- */
- rnh = rt_tables_get_rnh(rt->rt_fibnum, rt_key(rt)->sa_family);
RT_LOCK_ASSERT(rt);
- if (rnh == NULL)
- return (EAFNOSUPPORT);
RADIX_NODE_HEAD_LOCK_ASSERT(rnh);
#ifdef RADIX_MPATH
Modified: projects/random_number_generator/sys/net/route.h
==============================================================================
--- projects/random_number_generator/sys/net/route.h Sat May 3 17:33:30 2014 (r265281)
+++ projects/random_number_generator/sys/net/route.h Sat May 3 17:39:03 2014 (r265282)
@@ -371,7 +371,7 @@ int rtsock_routemsg(int, struct ifnet *i
* RTFREE() uses an unlocked entry.
*/
-int rtexpunge(struct rtentry *);
+int rt_expunge(struct radix_node_head *, struct rtentry *);
void rtfree(struct rtentry *);
int rt_check(struct rtentry **, struct rtentry **, struct sockaddr *);
Modified: projects/random_number_generator/sys/netinet/in_rmx.c
==============================================================================
--- projects/random_number_generator/sys/netinet/in_rmx.c Sat May 3 17:33:30 2014 (r265281)
+++ projects/random_number_generator/sys/netinet/in_rmx.c Sat May 3 17:39:03 2014 (r265282)
@@ -169,9 +169,8 @@ in_clsroute(struct radix_node *rn, struc
if (V_rtq_reallyold != 0) {
rt->rt_flags |= RTPRF_OURS;
rt->rt_expire = time_uptime + V_rtq_reallyold;
- } else {
- rtexpunge(rt);
- }
+ } else
+ rt_expunge(head, rt);
}
struct rtqk_arg {
@@ -388,6 +387,7 @@ in_detachhead(void **head, int off)
* plug back in.
*/
struct in_ifadown_arg {
+ struct radix_node_head *rnh;
struct ifaddr *ifa;
int del;
};
@@ -411,7 +411,7 @@ in_ifadownkill(struct radix_node *rn, vo
* Disconnect it from the tree and permit protocols
* to cleanup.
*/
- rtexpunge(rt);
+ rt_expunge(ap->rnh, rt);
/*
* At this point it is an rttrash node, and in case
* the above is the only reference we must free it.
Modified: projects/random_number_generator/sys/netinet6/in6_ifattach.c
==============================================================================
--- projects/random_number_generator/sys/netinet6/in6_ifattach.c Sat May 3 17:33:30 2014 (r265281)
+++ projects/random_number_generator/sys/netinet6/in6_ifattach.c Sat May 3 17:39:03 2014 (r265282)
@@ -863,7 +863,7 @@ in6_ifdetach(struct ifnet *ifp)
RT_DEFAULT_FIB);
if (rt) {
if (rt->rt_ifp == ifp)
- rtexpunge(rt);
+ rt_expunge(rnh, rt);
RTFREE_LOCKED(rt);
}
RADIX_NODE_HEAD_UNLOCK(rnh);
Modified: projects/random_number_generator/tools/tools/nanobsd/nanobsd.sh
==============================================================================
--- projects/random_number_generator/tools/tools/nanobsd/nanobsd.sh Sat May 3 17:33:30 2014 (r265281)
+++ projects/random_number_generator/tools/tools/nanobsd/nanobsd.sh Sat May 3 17:39:03 2014 (r265282)
@@ -233,7 +233,7 @@ build_kernel ( ) (
(
if [ -f ${NANO_KERNEL} ] ; then
- extra="KERNCONFDIR=$(realpath $(dirname ${NANO_KERNEL}))"
+ kernconfdir_arg="KERNCONFDIR='$(realpath $(dirname ${NANO_KERNEL}))'"
kernconf=$(basename ${NANO_KERNEL})
else
kernconf=${NANO_KERNEL}
@@ -245,10 +245,10 @@ build_kernel ( ) (
unset TARGET_CPUTYPE
# Note: We intentionally build all modules, not only the ones in
# NANO_MODULES so the built world can be reused by multiple images.
- env TARGET_ARCH=${NANO_ARCH} ${NANO_PMAKE} buildkernel \
- SRCCONF=${SRCCONF} \
- ${extra} __MAKE_CONF=${NANO_MAKE_CONF_BUILD} \
- KERNCONF=${kernconf}
+ eval "TARGET_ARCH=${NANO_ARCH} ${NANO_PMAKE} buildkernel \
+ SRCCONF='${SRCCONF}' \
+ __MAKE_CONF='${NANO_MAKE_CONF_BUILD}' \
+ ${kernconfdir_arg} KERNCONF=${kernconf}"
) > ${MAKEOBJDIRPREFIX}/_.bk 2>&1
)
@@ -315,19 +315,19 @@ install_kernel ( ) (
(
if [ -f ${NANO_KERNEL} ] ; then
- extra="KERNCONFDIR=$(realpath $(dirname ${NANO_KERNEL}))"
+ kernconfdir_arg="KERNCONFDIR='$(realpath $(dirname ${NANO_KERNEL}))'"
kernconf=$(basename ${NANO_KERNEL})
else
kernconf=${NANO_KERNEL}
fi
cd ${NANO_SRC}
- env TARGET_ARCH=${NANO_ARCH} ${NANO_MAKE} installkernel \
- DESTDIR=${NANO_WORLDDIR} \
- SRCCONF=${SRCCONF} \
- ${extra} __MAKE_CONF=${NANO_MAKE_CONF_INSTALL} \
- KERNCONF=${kernconf} \
- MODULES_OVERRIDE="${NANO_MODULES}"
+ eval "TARGET_ARCH=${NANO_ARCH} ${NANO_MAKE} installkernel \
+ DESTDIR='${NANO_WORLDDIR}' \
+ SRCCONF='${SRCCONF}' \
+ __MAKE_CONF='${NANO_MAKE_CONF_INSTALL}' \
+ ${kernconfdir_arg} KERNCONF=${kernconf} \
+ MODULES_OVERRIDE='${NANO_MODULES}'"
) > ${NANO_OBJ}/_.ik 2>&1
)
Modified: projects/random_number_generator/usr.bin/ssh-copy-id/ssh-copy-id.sh
==============================================================================
--- projects/random_number_generator/usr.bin/ssh-copy-id/ssh-copy-id.sh Sat May 3 17:33:30 2014 (r265281)
+++ projects/random_number_generator/usr.bin/ssh-copy-id/ssh-copy-id.sh Sat May 3 17:39:03 2014 (r265282)
@@ -45,7 +45,7 @@ sendkey() {
if ! grep -sqwF "$key" "$keyfile"; then \
printf "$alg $key $comment\n" >> "$keyfile" ; \
fi ; \
- done \
+ done ; \
if [ -x /sbin/restorecon ]; then \
/sbin/restorecon -F "$HOME/.ssh/" "$keyfile" >/dev/null 2>&1 || true ; \
fi
Modified: projects/random_number_generator/usr.bin/top/machine.c
==============================================================================
--- projects/random_number_generator/usr.bin/top/machine.c Sat May 3 17:33:30 2014 (r265281)
+++ projects/random_number_generator/usr.bin/top/machine.c Sat May 3 17:39:03 2014 (r265282)
@@ -67,6 +67,9 @@ static int namelength = TOP_USERNAME_LEN
#else
static int namelength = 8;
#endif
+/* TOP_JID_LEN based on max of 999999 */
+#define TOP_JID_LEN 7
+static int jidlength;
static int cmdlengthdelta;
/* Prototypes for top internals */
@@ -101,26 +104,26 @@ struct handle {
*/
static char io_header[] =
- " PID%s %-*.*s VCSW IVCSW READ WRITE FAULT TOTAL PERCENT COMMAND";
+ " PID%*s %-*.*s VCSW IVCSW READ WRITE FAULT TOTAL PERCENT COMMAND";
#define io_Proc_format \
- "%5d%s %-*.*s %6ld %6ld %6ld %6ld %6ld %6ld %6.2f%% %.*s"
+ "%5d%*s %-*.*s %6ld %6ld %6ld %6ld %6ld %6ld %6.2f%% %.*s"
static char smp_header_thr[] =
- " PID%s %-*.*s THR PRI NICE SIZE RES STATE C TIME %7s COMMAND";
+ " PID%*s %-*.*s THR PRI NICE SIZE RES STATE C TIME %7s COMMAND";
static char smp_header[] =
- " PID%s %-*.*s " "PRI NICE SIZE RES STATE C TIME %7s COMMAND";
+ " PID%*s %-*.*s " "PRI NICE SIZE RES STATE C TIME %7s COMMAND";
#define smp_Proc_format \
- "%5d%s %-*.*s %s%3d %4s%7s %6s %-6.6s %2d%7s %6.2f%% %.*s"
+ "%5d%*s %-*.*s %s%3d %4s%7s %6s %-6.6s %2d%7s %6.2f%% %.*s"
static char up_header_thr[] =
- " PID%s %-*.*s THR PRI NICE SIZE RES STATE TIME %7s COMMAND";
+ " PID%*s %-*.*s THR PRI NICE SIZE RES STATE TIME %7s COMMAND";
static char up_header[] =
- " PID%s %-*.*s " "PRI NICE SIZE RES STATE TIME %7s COMMAND";
+ " PID%*s %-*.*s " "PRI NICE SIZE RES STATE TIME %7s COMMAND";
#define up_Proc_format \
- "%5d%s %-*.*s %s%3d %4s%7s %6s %-6.6s%.0d%7s %6.2f%% %.*s"
+ "%5d%*s %-*.*s %s%3d %4s%7s %6s %-6.6s%.0d%7s %6.2f%% %.*s"
/* process state names for the "STATE" column of the display */
@@ -393,6 +396,11 @@ format_header(char *uname_field)
{
static char Header[128];
const char *prehead;
+
+ if (ps.jail)
+ jidlength = TOP_JID_LEN + 1; /* +1 for extra left space. */
+ else
+ jidlength = 0;
switch (displaymode) {
case DISP_CPU:
@@ -406,14 +414,14 @@ format_header(char *uname_field)
(ps.thread ? smp_header : smp_header_thr) :
(ps.thread ? up_header : up_header_thr);
snprintf(Header, sizeof(Header), prehead,
- ps.jail ? " JID" : "",
+ jidlength, ps.jail ? " JID" : "",
namelength, namelength, uname_field,
ps.wcpu ? "WCPU" : "CPU");
break;
case DISP_IO:
prehead = io_header;
snprintf(Header, sizeof(Header), prehead,
- ps.jail ? " JID" : "",
+ jidlength, ps.jail ? " JID" : "",
namelength, namelength, uname_field);
break;
}
@@ -806,7 +814,7 @@ format_next_process(caddr_t handle, char
int cpu, state;
struct rusage ru, *rup;
long p_tot, s_tot;
- char *proc_fmt, thr_buf[6], jid_buf[6];
+ char *proc_fmt, thr_buf[6], jid_buf[TOP_JID_LEN + 1];
*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
More information about the svn-src-projects
mailing list