svn commit: r247814 - in head: . sys/amd64/conf sys/cam/ctl sys/conf sys/i386/conf

Alfred Perlstein bright at mu.org
Mon Mar 4 22:27:33 UTC 2013


Ken,

By the time ctl_init is called, it looks like enough of the vm is there 
such that you could probe for physmem.   (I may be wrong and apologize 
if so)

Look at kern_mib.c:

> sysctl_hw_physmem(SYSCTL_HANDLER_ARGS)
> {
>         u_long val;
>
>         val = ctob(physmem);
>         return (sysctl_handle_long(oidp, &val, 0, req));
> }
>
> SYSCTL_PROC(_hw, HW_PHYSMEM, physmem, CTLTYPE_ULONG | CTLFLAG_RD,
>         0, 0, sysctl_hw_physmem, "LU", "");


Then the logic could be:

IF (set(tunable_ctl_onoff))
   ctl_onoff = tunable_ctl_onoff;
ELSE
   ctl_onoff = physmem > ctl_threshold;

This would get you much more people testing the code and the best out of 
the box experience for people downloading.

Hope this helps.

-Alfred


On 3/4/13 1:18 PM, Kenneth D. Merry wrote:
> Author: ken
> Date: Mon Mar  4 21:18:45 2013
> New Revision: 247814
> URL: http://svnweb.freebsd.org/changeset/base/247814
>
> Log:
>    Re-enable CTL in GENERIC on i386 and amd64, but turn on the CTL disable
>    tunable by default.
>    
>    This will allow GENERIC configurations to boot on small memory boxes, but
>    not require end users who want to use CTL to recompile their kernel.  They
>    can simply set kern.cam.ctl.disable=0 in loader.conf.
>    
>    The eventual solution to the memory usage problem is to change the way
>    CTL allocates memory to be more configurable, but this should fix things
>    for small memory situations in the mean time.
>    
>    UPDATING:		Explain the change in the CTL configuration, and
>    			how users can enable CTL if they would like to use
>    			it.
>    
>    sys/conf/options:	Add a new option, CTL_DISABLE, that prevents CTL
>    			from initializing.
>    
>    ctl.c:			If CTL_DISABLE is turned on, don't initialize.
>    
>    i386/conf/GENERIC,
>    amd64/conf/GENERIC:	Re-enable device ctl, and add the CTL_DISABLE
>    			option.
>
> Modified:
>    head/UPDATING
>    head/sys/amd64/conf/GENERIC
>    head/sys/cam/ctl/ctl.c
>    head/sys/conf/options
>    head/sys/i386/conf/GENERIC
>
> Modified: head/UPDATING
> ==============================================================================
> --- head/UPDATING	Mon Mar  4 21:09:22 2013	(r247813)
> +++ head/UPDATING	Mon Mar  4 21:18:45 2013	(r247814)
> @@ -26,6 +26,13 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 10
>   	disable the most expensive debugging functionality run
>   	"ln -s 'abort:false,junk:false' /etc/malloc.conf".)
>   
> +20130304:
> +	The ctl device has been re-enabled in GENERIC for i386 and amd64,
> +	but does not initialize by default (because of the new CTL_DISABLE
> +	option) to save memory.  To re-enable it, remove the CTL_DISABLE
> +	option from the kernel config file or set kern.cam.ctl.disable=0
> +	in /boot/loader.conf.
> +
>   20130301:
>   	The ctl device has been disabled in GENERIC for i386 and amd64.
>   	This was done due to the extra memory being allocated at system
>
> Modified: head/sys/amd64/conf/GENERIC
> ==============================================================================
> --- head/sys/amd64/conf/GENERIC	Mon Mar  4 21:09:22 2013	(r247813)
> +++ head/sys/amd64/conf/GENERIC	Mon Mar  4 21:18:45 2013	(r247814)
> @@ -138,7 +138,10 @@ device		sa		# Sequential Access (tape et
>   device		cd		# CD
>   device		pass		# Passthrough device (direct ATA/SCSI access)
>   device		ses		# Enclosure Services (SES and SAF-TE)
> -#device		ctl		# CAM Target Layer
> +device		ctl		# CAM Target Layer
> +options		CTL_DISABLE	# Disable CTL by default to save memory.
> +				# Re-enable with kern.cam.ctl.disable=0 in
> +				# /boot/loader.conf
>   
>   # RAID controllers interfaced to the SCSI subsystem
>   device		amr		# AMI MegaRAID
>
> Modified: head/sys/cam/ctl/ctl.c
> ==============================================================================
> --- head/sys/cam/ctl/ctl.c	Mon Mar  4 21:09:22 2013	(r247813)
> +++ head/sys/cam/ctl/ctl.c	Mon Mar  4 21:18:45 2013	(r247814)
> @@ -78,6 +78,8 @@ __FBSDID("$FreeBSD$");
>   #include <cam/ctl/ctl_scsi_all.h>
>   #include <cam/ctl/ctl_error.h>
>   
> +#include "opt_ctl.h"
> +
>   struct ctl_softc *control_softc = NULL;
>   
>   /*
> @@ -317,7 +319,11 @@ static int persis_offset;
>   static uint8_t ctl_pause_rtr;
>   static int     ctl_is_single;
>   static int     index_to_aps_page;
> +#ifdef CTL_DISABLE
> +int	   ctl_disable = 1;
> +#else
>   int	   ctl_disable = 0;
> +#endif
>   
>   SYSCTL_NODE(_kern_cam, OID_AUTO, ctl, CTLFLAG_RD, 0, "CAM Target Layer");
>   SYSCTL_INT(_kern_cam_ctl, OID_AUTO, disable, CTLFLAG_RDTUN, &ctl_disable, 0,
>
> Modified: head/sys/conf/options
> ==============================================================================
> --- head/sys/conf/options	Mon Mar  4 21:09:22 2013	(r247813)
> +++ head/sys/conf/options	Mon Mar  4 21:18:45 2013	(r247814)
> @@ -329,6 +329,9 @@ SCSI_PT_DEFAULT_TIMEOUT	opt_pt.h
>   # Options used only in cam/scsi/scsi_ses.c
>   SES_ENABLE_PASSTHROUGH	opt_ses.h
>   
> +# Options used only in cam/ctl
> +CTL_DISABLE		opt_ctl.h
> +
>   # Options used in dev/sym/ (Symbios SCSI driver).
>   SYM_SETUP_LP_PROBE_MAP	opt_sym.h	#-Low Priority Probe Map (bits)
>   					# Allows the ncr to take precedence
>
> Modified: head/sys/i386/conf/GENERIC
> ==============================================================================
> --- head/sys/i386/conf/GENERIC	Mon Mar  4 21:09:22 2013	(r247813)
> +++ head/sys/i386/conf/GENERIC	Mon Mar  4 21:18:45 2013	(r247814)
> @@ -146,7 +146,10 @@ device		sa		# Sequential Access (tape et
>   device		cd		# CD
>   device		pass		# Passthrough device (direct ATA/SCSI access)
>   device		ses		# Enclosure Services (SES and SAF-TE)
> -#device		ctl		# CAM Target Layer
> +device		ctl		# CAM Target Layer
> +options		CTL_DISABLE	# Disable CTL by default to save memory.
> +				# Re-enable with kern.cam.ctl.disable=0 in
> +				# /boot/loader.conf
>   
>   # RAID controllers interfaced to the SCSI subsystem
>   device		amr		# AMI MegaRAID
>



More information about the svn-src-all mailing list