Date: Tue, 20 Aug 2002 15:02:00 -0300 From: Mario Sergio Fujikawa Ferreira <lioux@FreeBSD.org> To: FreeBSD-hackers@FreeBSD.org Subject: Creating a sysctl? (mission impossible) Message-ID: <20020820180222.927.qmail@exxodus.fedaykin.here>
next in thread | raw e-mail | index | archive | help
[-- Attachment #1 --]
Hi,
This is for -STABLE system as of August 15th.
$ uname -a
FreeBSD Here.here 4.6-STABLE FreeBSD 4.6-STABLE #8: Tue Aug 20 14:42:43 BRT 2002 lioux@Here.here:/usr/src/sys/compile/LIOUX i386
I am trying to create one sysctl so that I can read information
from a lottery scheduler that I am trying to write.
The sysctl is very very simple. I add a lottery node under kern
then add a member global_tickets under kern.lottery. Very simple stuff
that is not working.
Here follows the sample I am using. I used kern_poll.c as
example.
1) Created a file kern_lottery.c which is attached. Then,
placed this file under /usr/src/sys/kern/kern_lottery;
2) Then, added a reference for it in both /usr/src/sys/conf/files
and /usr/src/sys/conf/options. Check attached patch-lottery;
3) Then, added "options SCHEDULER_LOTTERY" to a kernel
config file. Compiled, installed, rebooted.
Here follows the results after the reboot:
$ nm /kernel | grep -i lotter
c0237ee0 d sysctl___kern_lottery
c0237f20 d sysctl___kern_lottery_global_tickets
c0264238 B sysctl__kern_lottery_children
$ sysctl -a | grep -i lot
$ sysctl -A | grep -i lot
As you can see, sysctl returns nothing even though the
relevant symbols are in the kernel. It knows nothing about the
lottery node. I can reproduce this "problem" in 2 different boxes
with different versions of -STABLE.
The relevant sysctl code follows:
typedef _BSD_PID_T_ ticket_t; /* ticket type */
static ticket_t global_tickets = 0; /* XXX lottery */
SYSCTL_NODE(_kern, OID_AUTO, lottery, CTLFLAG_RW, 0,
"Lottery scheduling parameters");
SYSCTL_UINT(_kern_lottery, OID_AUTO, global_tickets, CTLFLAG_RD,
&global_tickets, 0, "Current global tickets")
Any ideas why this is not working? Help plz. I hope you
guys know what I am doing wrong. IF I add this code to kern_switch.c,
everything works but it does not work when I add to kern_lottery.c
My 1st thought is that it does not like the fact that I'm
trying to create a node inside kern from another file. However,
kern_poll.c works like a charm.
Regards,
ps: please CC: me in your replies since I only receive digests of
this list.
--
Mario S F Ferreira - DF - Brazil - "I guess this is a signature."
Computer Science Undergraduate | FreeBSD Committer | CS Developer
flames to beloved devnull@someotherworldbeloworabove.org
feature, n: a documented bug | bug, n: an undocumented feature
[-- Attachment #2 --]
--- sys/conf/files.orig Tue Aug 20 14:48:54 2002
+++ sys/conf/files Tue Aug 20 14:37:49 2002
@@ -572,6 +572,8 @@
kern/kern_ktrace.c standard
kern/kern_lock.c standard
kern/kern_lockf.c standard
+# XXX lottery
+kern/kern_lottery.c optional scheduler_lottery
kern/kern_malloc.c standard
kern/kern_mib.c standard
kern/kern_ntptime.c standard
--- sys/conf/options.orig Tue Aug 20 14:49:02 2002
+++ sys/conf/options Tue Aug 20 14:38:17 2002
@@ -468,3 +468,7 @@
# Polling device handling
DEVICE_POLLING opt_global.h
+
+# XXX lottery
+# Lottery scheduler
+SCHEDULER_LOTTERY opt_sched_lottery.h
[-- Attachment #3 --]
/*
* Copyright (c) 2001, 2002
* Mario Sergio Fujikawa Ferreira <lioux@FreeBSD.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Fedaykin: src/sys/kern/kern_lottery.c,v 1.1.2.10 2002/08/19 19:37:34 lioux Exp $
*/
#ifdef SMP
#include "opt_lint.h"
#ifndef COMPILING_LINT
#error SCHEDULER_LOTTERY is not compatible with SMP yet
#endif
#endif
#include <sys/types.h>
#include <sys/time.h>
#include <sys/sysctl.h>
/* the process structure */
#include <sys/param.h>
#include <sys/proc.h>
#include <stdlib.h>
#include <stdio.h>
typedef _BSD_PID_T_ ticket_t; /* ticket type */
static ticket_t global_tickets = 0; /* XXX lottery */
SYSCTL_NODE(_kern, OID_AUTO, lottery, CTLFLAG_RW, 0,
"Lottery scheduling parameters");
SYSCTL_UINT(_kern_lottery, OID_AUTO, global_tickets, CTLFLAG_RD,
&global_tickets, 0, "Current global tickets");
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020820180222.927.qmail>
