Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 21 Jul 1997 15:21:06 -0700 (PDT)
From:      Vinay Bannai <vinay@agni.nuko.com>
To:        se@freebsd.org (Stefan Esser)
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: Kernel panic in driver probe() routine
Message-ID:  <199707212221.PAA03602@agni.nuko.com>
In-Reply-To: <19970722000635.41795@mi.uni-koeln.de> from "Stefan Esser" at "Jul 22, 97 00:06:35 am"

next in thread | previous in thread | raw e-mail | index | archive | help
According to Stefan Esser:
> On Jul 21, Vinay Bannai <vinay@agni.nuko.com> wrote:
> > Actually it was in my attach() routine. Here it is:
> > I am freeing up my memory towards the end under the label fail
> 
> Ahhh, yes, I see ...
> 
> But you are freeing memory not obtained through a call to 
> malloc(), and that is generally considered a bad thing :)
> 
> >   if (!pci_map_mem(config_id, CYCLONE_PCI_MMRR_REG, 
> > 		   (vm_offset_t *)&vaddr, (vm_offset_t *)&paddr)) {
> >     printf("cyclone%d: couldn't map memory\n", unit);
> >     goto fail;
> 
> > fail:
> >   if (vaddr)
> >     free((void *)vaddr, M_DEVBUF);
> 
> Here vmaddr did not point to a memory region allocated by
> malloc, but to one that got a virtual to physical mapping
> established by a call to pmap_mapdev (/sys/i386/i386/pmap.c).

STefan,

You are correct. I just looked at the code for pmap.c and it in turn calls
kern_alloc_pageable(). I don't exaclty understand all the stuff about maps
and submaps, but seems like the virtual memory is not coming from the
place where malloc() gets it!! 

> You may want to ask David Greenman about how to release
> such a mapping. I didn't bother, since the page table entry
> created for the device consumes only 4 bytes per 4KB page
> you allocated, and the code to free the page table entries
> is likely to be much larger, except for large regions ...
> 
> Regards, STefan

Yup. I will just ignore it for the time being and bother DG later on when
I start running into DMA problems. :-)

The PCI device that I am interfacing is capable of doing lot more things
(since it has got a i960 processor wiht 4M of RAM). But initially I want
to test by passing back and forth to the card some packets of fixed
size. Are there any guidelines as to how much memory I should allocate for
the Rx and Tx buffers? I am bad at picking numbers :-)

Vinay
-- 
Vinay Bannai                     E-mail: vinay@agni.nuko.com
(408)-526-0280 x 275 (Work)     http://agni.nuko.com/~vinay




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