lkml.org 
[lkml]   [2009]   [May]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subject[PATCH 16/19] Add allocation of recvbuf[1500] at run time to reduce stack size
    From
    Date
    From: Frank Seidel <frank@f-seidel.de>

    Reduce stack usage.

    modified by Andreas Eversberg,

    Signed-off-by: Frank Seidel <frank@f-seidel.de>
    Signed-off-by: Andreas Eversberg <andreas@eversberg.eu>
    Signed-off-by: Karsten Keil <keil@b1-systems.de>
    ---
    drivers/isdn/mISDN/l1oip_core.c | 21 +++++++++++++++++----
    1 files changed, 17 insertions(+), 4 deletions(-)

    diff --git a/drivers/isdn/mISDN/l1oip_core.c b/drivers/isdn/mISDN/l1oip_core.c
    index abe5749..ea3c3aa 100644
    --- a/drivers/isdn/mISDN/l1oip_core.c
    +++ b/drivers/isdn/mISDN/l1oip_core.c
    @@ -663,18 +663,28 @@ l1oip_socket_thread(void *data)
    struct iovec iov;
    mm_segment_t oldfs;
    struct sockaddr_in sin_rx;
    - unsigned char recvbuf[1500];
    + unsigned char *recvbuf;
    + size_t recvbuf_size = 1500;
    int recvlen;
    struct socket *socket = NULL;
    DECLARE_COMPLETION(wait);

    + /* allocate buffer memory */
    + recvbuf = kmalloc(recvbuf_size, GFP_KERNEL);
    + if (!recvbuf) {
    + printk(KERN_ERR "%s: Failed to alloc recvbuf.\n", __func__);
    + ret = -ENOMEM;
    + goto fail;
    + }
    +
    /* make daemon */
    allow_signal(SIGTERM);

    /* create socket */
    if (sock_create(PF_INET, SOCK_DGRAM, IPPROTO_UDP, &socket)) {
    printk(KERN_ERR "%s: Failed to create socket.\n", __func__);
    - return -EIO;
    + ret = -EIO;
    + goto fail;
    }

    /* set incoming address */
    @@ -730,10 +740,10 @@ l1oip_socket_thread(void *data)
    __func__);
    while (!signal_pending(current)) {
    iov.iov_base = recvbuf;
    - iov.iov_len = sizeof(recvbuf);
    + iov.iov_len = recvbuf_size;
    oldfs = get_fs();
    set_fs(KERNEL_DS);
    - recvlen = sock_recvmsg(socket, &msg, sizeof(recvbuf), 0);
    + recvlen = sock_recvmsg(socket, &msg, recvbuf_size, 0);
    set_fs(oldfs);
    if (recvlen > 0) {
    l1oip_socket_parse(hc, &sin_rx, recvbuf, recvlen);
    @@ -760,6 +770,9 @@ l1oip_socket_thread(void *data)
    __func__);

    fail:
    + /* free recvbuf */
    + kfree(recvbuf);
    +
    /* close socket */
    if (socket)
    sock_release(socket);
    --
    1.6.0.2


    \
     
     \ /
      Last update: 2009-05-19 19:17    [W:0.035 / U:31.176 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site