lkml.org 
[lkml]   [2006]   [Jun]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[RFC PATCH 2.6.17-mm1 1/3] ieee1394: reduce size of hpsb_host by 252 bytes
    Struct hpsb_host contains struct hpsb_tlabel_pool 63 times, therefore
    each word that can be shaved off of hpsb_tlabel_pool is a win.

    Since hpsb_tlabel_pool.next is accessed twice as often as .allocations,
    .next is put into the lower part of the word. The value of .allocations
    rolls over after about 67 million now but we don't care.

    Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
    ---
    drivers/ieee1394/ieee1394_transactions.c | 22 ++++++++++++----------
    drivers/ieee1394/ieee1394_types.h | 9 +++++++--
    2 files changed, 19 insertions(+), 12 deletions(-)

    Index: linux/drivers/ieee1394/ieee1394_types.h
    ===================================================================
    --- linux.orig/drivers/ieee1394/ieee1394_types.h 2006-04-24 22:20:24.000000000 +0200
    +++ linux/drivers/ieee1394/ieee1394_types.h 2006-06-24 09:52:37.000000000 +0200
    @@ -17,8 +17,13 @@
    struct hpsb_tlabel_pool {
    DECLARE_BITMAP(pool, 64);
    spinlock_t lock;
    - u8 next;
    - u32 allocations;
    +#ifdef __BIG_ENDIAN_BITFIELD
    + u32 allocations :26 __attribute__((packed));
    + u32 next :6 __attribute__((packed));
    +#else
    + u32 next :6 __attribute__((packed));
    + u32 allocations :26 __attribute__((packed));
    +#endif
    struct semaphore count;
    };

    Index: linux/drivers/ieee1394/ieee1394_transactions.c
    ===================================================================
    --- linux.orig/drivers/ieee1394/ieee1394_transactions.c 2006-06-23 19:10:30.000000000 +0200
    +++ linux/drivers/ieee1394/ieee1394_transactions.c 2006-06-24 09:24:00.000000000 +0200
    @@ -136,7 +136,7 @@ int hpsb_get_tlabel(struct hpsb_packet *
    {
    unsigned long flags;
    struct hpsb_tlabel_pool *tp;
    - int n = NODEID_TO_NODE(packet->node_id);
    + int tlabel, n = NODEID_TO_NODE(packet->node_id);

    if (unlikely(n == ALL_NODES))
    return 0;
    @@ -151,15 +151,17 @@ int hpsb_get_tlabel(struct hpsb_packet *

    spin_lock_irqsave(&tp->lock, flags);

    - packet->tlabel = find_next_zero_bit(tp->pool, 64, tp->next);
    - if (packet->tlabel > 63)
    - packet->tlabel = find_first_zero_bit(tp->pool, 64);
    - tp->next = (packet->tlabel + 1) % 64;
    + tlabel = find_next_zero_bit(tp->pool, 64, tp->next);
    + if (tlabel > 63)
    + tlabel = find_first_zero_bit(tp->pool, 64);
    + /* tp->next is 6 bits wide, thus rolls over from 63 to 0 */
    + tp->next = (tlabel + 1);
    /* Should _never_ happen */
    - BUG_ON(test_and_set_bit(packet->tlabel, tp->pool));
    + BUG_ON(test_and_set_bit(tlabel, tp->pool));
    tp->allocations++;
    - spin_unlock_irqrestore(&tp->lock, flags);

    + spin_unlock_irqrestore(&tp->lock, flags);
    + packet->tlabel = tlabel;
    return 0;
    }

    @@ -178,16 +180,16 @@ void hpsb_free_tlabel(struct hpsb_packet
    {
    unsigned long flags;
    struct hpsb_tlabel_pool *tp;
    - int n = NODEID_TO_NODE(packet->node_id);
    + int tlabel = packet->tlabel, n = NODEID_TO_NODE(packet->node_id);

    if (unlikely(n == ALL_NODES))
    return;
    tp = &packet->host->tpool[n];

    - BUG_ON(packet->tlabel > 63 || packet->tlabel < 0);
    + BUG_ON(tlabel > 63 || tlabel < 0);

    spin_lock_irqsave(&tp->lock, flags);
    - BUG_ON(!test_and_clear_bit(packet->tlabel, tp->pool));
    + BUG_ON(!test_and_clear_bit(tlabel, tp->pool));
    spin_unlock_irqrestore(&tp->lock, flags);

    up(&tp->count);

    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2006-06-24 11:36    [W:0.035 / U:0.012 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site