[PATCH RFC] pcmcia: load include_io, include_mem from /etc/modprobe.d/pcmcia.conf

Dominik Brodowski linux at dominikbrodowski.net
Sun Nov 8 03:36:05 EST 2009


Hey,

On Sun, Nov 08, 2009 at 11:19:24AM +0900, Komuro wrote:
> load include_io, include_mem from /etc/modprobe.d/pcmcia.conf
> instead of running pcmcia-socket-startup.
> (integration of pcmcia-socket-startup to the kernel)

Hmmm... we can't get rid of userspace in all cases, can't we?

> if /etc/modprobe.d/pcmcia.conf does not exist,
> rsrc_nonstatic allocates minimum io/mem resource.

Could you split this up into two different parts? One for the module
parameter, one for the default allocation. The latter one would need the ACK
of the x86 maintainer(s), for I'm not sure that it is safe to allocate this
area unconditionally. (Well, of course we do additional checks, but
anyways...)

> options rsrc_nonstatic include_io_list=0x100,0x3af,0x3e0,0x4ff,0x800,0x820,0xc00,0xcf7,0xa00,0xaff
> options rsrc_nonstatic include_mem_list=0xc0000,0xfffff,0xa0000000,0xa0ffffff,0x60000000,0x60ffffff

Is there no way to specifiy a list of ranges? Seems not :(

> --- linux-2.6.32-rc5-git3/drivers/pcmcia/rsrc_nonstatic.c.orig	2009-11-01 20:51:39.000000000 +0900
> +++ linux-2.6.32-rc5-git3/drivers/pcmcia/rsrc_nonstatic.c	2009-11-08 11:00:14.000000000 +0900
> @@ -47,6 +47,13 @@ INT_MODULE_PARM(probe_io,	1);		/* IO por
>  INT_MODULE_PARM(mem_limit,	0x10000);
>  #endif
>  
> +static int include_io_list[16];
> +static unsigned int include_io_count = 0;
> +module_param_array(include_io_list, int, &include_io_count, 0444);
> +static int include_mem_list[16];
> +static unsigned int include_mem_count = 0;
> +module_param_array(include_mem_list, int, &include_mem_count, 0444);
> +

Would it be better to do the static default initialization here?

	#ifdef X86
	static int include_io_list[16] = [0x0100, 0x03af ....
	#else
	static int include_io_list[16];
	#endif

>  /* for io_db and mem_db */
>  struct resource_map {
>  	u_long			base, num;
> @@ -779,8 +786,49 @@ static int nonstatic_autoadd_resources(s
>  	struct resource *res;
>  	int i, done = 0;
>  
> -	if (!s->cb_dev || !s->cb_dev->bus)
> -		return -ENODEV;
> +	if (include_io_count) {
We don't need this check here.

> +		for (i = 0; i < include_io_count; i=i+2) {
> +			if (!adjust_io(s, ADD_MANAGED_RESOURCE, 
> +				include_io_list[i], include_io_list[i+1])) {
> +				done |= IORESOURCE_IO;
> +			}
Unneeded brackets.

> +		}
> +	}
> +#if defined(CONFIG_X86)
> +	  else {
> +		/* allocate minimum io resource */
> +		if (!adjust_io(s, ADD_MANAGED_RESOURCE, 0x100, 0x03af)) {
Either 0x0100, or 0x3af. You don't need brackets here.
> +			done |= IORESOURCE_IO;
> +		}
> +	} 
> +#endif
> +
> +	if (include_mem_count) {
Check not needed.

> +		for (i = 0; i < include_mem_count; i=i+2) {
> +			if (!adjust_memory(s, ADD_MANAGED_RESOURCE, 
> +				include_mem_list[i], include_mem_list[i+1])) {
Brackets.

> +				done |= IORESOURCE_MEM;
> +			}
> +		}
> +	}
> +
> +#if defined(CONFIG_X86)
> +	  else  {
> +		/* allocate minimum memory resource */
> +		if (!adjust_memory(s, ADD_MANAGED_RESOURCE, 
> +				0xa0000000, 0xa0ffffff)) {
Brackets.
> +			done |= IORESOURCE_MEM;
> +		}
> +	} 
> +#endif
> +
> +	if (!s->cb_dev || !s->cb_dev->bus) {
> +		if (done == (IORESOURCE_MEM | IORESOURCE_IO)) {
> +			s->resource_setup_done = 1;
> +			return 0;
> +		} else 
> +			return -ENODEV;
> +	}
>  
>  #if defined(CONFIG_X86)
>  	/* If this is the root bus, the risk of hitting
> @@ -789,8 +837,13 @@ static int nonstatic_autoadd_resources(s
>  	 * resources is too big. Therefore, don't do auto-adding
>  	 * of resources at the moment.
>  	 */
> -	if (s->cb_dev->bus->number == 0)
> -		return -EINVAL;
> +	if (s->cb_dev->bus->number == 0) {
> +		if (done == (IORESOURCE_MEM | IORESOURCE_IO)) {
> +			s->resource_setup_done = 1;
> +			return 0;
> +		} else 
> +			return -EINVAL;
> +	}
>  #endif
>  
>  	for (i=0; i < PCI_BUS_NUM_RESOURCES; i++) {


Best,
	Dominik



More information about the linux-pcmcia mailing list