Re: contigmalloc + contigfree = memory leak?

2001-10-15 Thread Eugene M. Kim

Oops, I'm sorry for the self-reply.  Just found a highly helpful thread
posted from 11th (`contigfree, free what?'), so please disregard my
message.

/me bonks his head against a wall that says `mea culpa'

Thanks,
Eugene

On Tue, Oct 16, 2001 at 02:42:17PM +0900, Eugene M. Kim wrote:
> 
> 
> Greetings,
> 
> QUESTION:
> Does contigfree() really free up memory allocated using contigmalloc()?
> 
> BACKGROUND:
> I've been trying to make up a kmod that allocates/deallocates memory in
> a specific physical address range.  Mike Smith suggested using busdma
> functions to do the job, so I followed it.
> 
> After allocating and deallocating memory several times, it seemed that
> bus_dmamem_free() was not freeing the memory properly.  I looked at
> busdma_machdep.c where bus_dmamem_free() was defined, and found:
> 
> void
> bus_dmamem_free(bus_dma_tag_t dmat, void *vaddr, bus_dmamap_t map)
> {
> /*
>  * dmamem does not need to be bounced, so the map should be
>  * NULL
>  */
> if (map != NULL)
> panic("bus_dmamem_free: Invalid map freed\n");
> /* XXX There is no "contigfree" and "free" doesn't work */
> if ((dmat->maxsize <= PAGE_SIZE) && dmat->lowaddr >= ptoa(Maxmem))
> free(vaddr, M_DEVBUF);
> }
> 
> However, there *is* contigfree() and a related patch was applied on
> -current around August, so I did the same thing (adding an else clause
> to call contigfree(vaddr, dmat->maxsize, M_DEVBUF)).
> 
> It didn't solve the memory leak problem either, so I'm stuck here...
> 
> Could anyone shed a light on this?
> 
> Regards,
> Eugene
> 
> To Unsubscribe: send mail to [EMAIL PROTECTED]
> with "unsubscribe freebsd-hackers" in the body of the message

To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message



contigmalloc + contigfree = memory leak?

2001-10-15 Thread Eugene M. Kim

Greetings,

QUESTION:
Does contigfree() really free up memory allocated using contigmalloc()?

BACKGROUND:
I've been trying to make up a kmod that allocates/deallocates memory in
a specific physical address range.  Mike Smith suggested using busdma
functions to do the job, so I followed it.

After allocating and deallocating memory several times, it seemed that
bus_dmamem_free() was not freeing the memory properly.  I looked at
busdma_machdep.c where bus_dmamem_free() was defined, and found:

void
bus_dmamem_free(bus_dma_tag_t dmat, void *vaddr, bus_dmamap_t map)
{
/*
 * dmamem does not need to be bounced, so the map should be
 * NULL
 */
if (map != NULL)
panic("bus_dmamem_free: Invalid map freed\n");
/* XXX There is no "contigfree" and "free" doesn't work */
if ((dmat->maxsize <= PAGE_SIZE) && dmat->lowaddr >= ptoa(Maxmem))
free(vaddr, M_DEVBUF);
}

However, there *is* contigfree() and a related patch was applied on
-current around August, so I did the same thing (adding an else clause
to call contigfree(vaddr, dmat->maxsize, M_DEVBUF)).

It didn't solve the memory leak problem either, so I'm stuck here...

Could anyone shed a light on this?

Regards,
Eugene

To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message