diff options
author | kpfleming <kpfleming@5390a7c7-147a-4af0-8ec9-7488f05a26cb> | 2006-07-13 01:52:31 +0000 |
---|---|---|
committer | kpfleming <kpfleming@5390a7c7-147a-4af0-8ec9-7488f05a26cb> | 2006-07-13 01:52:31 +0000 |
commit | bf76c0bc0cad0e259017cdc575abef98333da635 (patch) | |
tree | eb5ba7f42645aa5984b1d9cb9ab66499720af12a /zttranscode.c | |
parent | eb646fbed25df3b6714e83e48a0694af62c7e18d (diff) |
mark memory pages used by transcoder as reserved
git-svn-id: http://svn.digium.com/svn/zaptel/trunk@1221 5390a7c7-147a-4af0-8ec9-7488f05a26cb
Diffstat (limited to 'zttranscode.c')
-rw-r--r-- | zttranscode.c | 38 |
1 files changed, 20 insertions, 18 deletions
diff --git a/zttranscode.c b/zttranscode.c index aa6bd3a..600ec58 100644 --- a/zttranscode.c +++ b/zttranscode.c @@ -171,28 +171,30 @@ static int zt_tc_open(struct inode *inode, struct file *file) { struct zt_transcoder_channel *ztc; struct zt_transcode_header *zth; + struct page *page; - ztc = kmalloc(sizeof(*ztc), GFP_KERNEL); - zth = kmalloc(sizeof(*zth), GFP_KERNEL | GFP_DMA); - - if (ztc && zth) { - memset(ztc, 0, sizeof(*ztc)); - memset(zth, 0, sizeof(*zth)); - ztc->flags = ZT_TC_FLAG_TRANSIENT|ZT_TC_FLAG_BUSY; - ztc->tch = zth; - if (debug) - printk("Allocated Transcoder Channel, header is at %p!\n", zth); - zth->magic = ZT_TRANSCODE_MAGIC; - file->private_data = ztc; + if (!(ztc = kmalloc(sizeof(*ztc), GFP_KERNEL))) + return -ENOMEM; - return 0; + if (!(zth = kmalloc(sizeof(*zth), GFP_KERNEL | GFP_DMA))) { + kfree(ztc); + return -ENOMEM; } + + memset(ztc, 0, sizeof(*ztc)); + memset(zth, 0, sizeof(*zth)); + ztc->flags = ZT_TC_FLAG_TRANSIENT | ZT_TC_FLAG_BUSY; + ztc->tch = zth; + if (debug) + printk("Allocated Transcoder Channel, header is at %p!\n", zth); + zth->magic = ZT_TRANSCODE_MAGIC; + file->private_data = ztc; + for (page = virt_to_page(zth); + page < virt_to_page((unsigned long) zth + sizeof(*zth)); + page++) + SetPageReserved(page); - if (ztc) - kfree(ztc); - if (zth) - kfree(zth); - return -ENOMEM; + return 0; } static void ztc_release(struct zt_transcoder_channel *ztc) |