Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 12 Jun 2010 13:20:38 +0000 (UTC)
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r209104 - in head/sys: kern sys
Message-ID:  <201006121320.o5CDKc4U010170@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kib
Date: Sat Jun 12 13:20:38 2010
New Revision: 209104
URL: http://svn.freebsd.org/changeset/base/209104

Log:
  Add modifications of devctl_notify(9) functions that take flags. Use
  flags to specify M_WAITOK/M_NOWAIT. M_WAITOK allows devctl to sleep for
  the memory allocation.
  
  As Warner noted, allowing the functions to sleep might cause
  reordering of the queued notifications.
  
  Reviewed by:	imp, jh
  MFC after:	3 weeks

Modified:
  head/sys/kern/subr_bus.c
  head/sys/sys/bus.h

Modified: head/sys/kern/subr_bus.c
==============================================================================
--- head/sys/kern/subr_bus.c	Sat Jun 12 13:10:03 2010	(r209103)
+++ head/sys/kern/subr_bus.c	Sat Jun 12 13:20:38 2010	(r209104)
@@ -539,7 +539,7 @@ devctl_process_running(void)
  * that @p data is allocated using the M_BUS malloc type.
  */
 void
-devctl_queue_data(char *data)
+devctl_queue_data_f(char *data, int flags)
 {
 	struct dev_event_info *n1 = NULL, *n2 = NULL;
 	struct proc *p;
@@ -548,7 +548,7 @@ devctl_queue_data(char *data)
 		goto out;
 	if (devctl_queue_length == 0)
 		goto out;
-	n1 = malloc(sizeof(*n1), M_BUS, M_NOWAIT);
+	n1 = malloc(sizeof(*n1), M_BUS, flags);
 	if (n1 == NULL)
 		goto out;
 	n1->dei_data = data;
@@ -588,12 +588,19 @@ out:
 	return;
 }
 
+void
+devctl_queue_data(char *data)
+{
+
+	devctl_queue_data_f(data, M_NOWAIT);
+}
+
 /**
  * @brief Send a 'notification' to userland, using standard ways
  */
 void
-devctl_notify(const char *system, const char *subsystem, const char *type,
-    const char *data)
+devctl_notify_f(const char *system, const char *subsystem, const char *type,
+    const char *data, int flags)
 {
 	int len = 0;
 	char *msg;
@@ -611,7 +618,7 @@ devctl_notify(const char *system, const 
 	if (data != NULL)
 		len += strlen(data);
 	len += 3;	/* '!', '\n', and NUL */
-	msg = malloc(len, M_BUS, M_NOWAIT);
+	msg = malloc(len, M_BUS, flags);
 	if (msg == NULL)
 		return;		/* Drop it on the floor */
 	if (data != NULL)
@@ -620,7 +627,15 @@ devctl_notify(const char *system, const 
 	else
 		snprintf(msg, len, "!system=%s subsystem=%s type=%s\n",
 		    system, subsystem, type);
-	devctl_queue_data(msg);
+	devctl_queue_data_f(msg, flags);
+}
+
+void
+devctl_notify(const char *system, const char *subsystem, const char *type,
+    const char *data)
+{
+
+	devctl_notify_f(system, subsystem, type, data, M_NOWAIT);
 }
 
 /*

Modified: head/sys/sys/bus.h
==============================================================================
--- head/sys/sys/bus.h	Sat Jun 12 13:10:03 2010	(r209103)
+++ head/sys/sys/bus.h	Sat Jun 12 13:20:38 2010	(r209104)
@@ -85,8 +85,11 @@ struct u_device {
  * included in case devctl_notify isn't sufficiently general.
  */
 boolean_t devctl_process_running(void);
+void devctl_notify_f(const char *__system, const char *__subsystem,
+    const char *__type, const char *__data, int __flags);
 void devctl_notify(const char *__system, const char *__subsystem,
     const char *__type, const char *__data);
+void devctl_queue_data_f(char *__data, int __flags);
 void devctl_queue_data(char *__data);
 
 /**



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