Remove ROS_MEM_ALIGN, etc. macros
authorAndrew Waterman <waterman@cs.berkeley.edu>
Wed, 27 Mar 2013 10:21:30 +0000 (03:21 -0700)
committerAndrew Waterman <waterman@cs.berkeley.edu>
Wed, 27 Mar 2013 10:21:30 +0000 (03:21 -0700)
Manually rounding up sizeof(struct pbuf) to the pointer size is unnecessary
because the struct contains pointers.  Also, some targets have pointer more
stringent alignment requirements than 4.

kern/include/ros/common.h
kern/src/net/pbuf.c
kern/src/net/tcp_out.c

index c1c6add..6670875 100644 (file)
@@ -47,7 +47,6 @@ typedef size_t uintreg_t;
 })
 #endif
 
 })
 #endif
 
-#define ROS_MEM_ALIGN 4
 // Rounding operations (efficient when n is a power of 2)
 // Round down to the nearest multiple of n
 #define ROUNDDOWN(a, n)                                                \
 // Rounding operations (efficient when n is a power of 2)
 // Round down to the nearest multiple of n
 #define ROUNDDOWN(a, n)                                                \
@@ -62,8 +61,6 @@ typedef size_t uintreg_t;
        (typeof(a)) (ROUNDDOWN((uintptr_t) (a) + __n - 1, __n));        \
 })
 
        (typeof(a)) (ROUNDDOWN((uintptr_t) (a) + __n - 1, __n));        \
 })
 
-#define MEM_ALIGN_SIZE(size) ROUNDUP(size, ROS_MEM_ALIGN)
-
 // Round down to the nearest multiple of n
 #define PTRROUNDDOWN(a, n)                                             \
 ({                                                             \
 // Round down to the nearest multiple of n
 #define PTRROUNDDOWN(a, n)                                             \
 ({                                                             \
index b327899..788474b 100644 (file)
  * 3. Tot_len could be useless at some point, especially if the max len is only two...
  * 4. pbuf_chain and pbuf_cat, pbuf_clen has no users yet
  */
  * 3. Tot_len could be useless at some point, especially if the max len is only two...
  * 4. pbuf_chain and pbuf_cat, pbuf_clen has no users yet
  */
-#define SIZEOF_STRUCT_PBUF (ROUNDUP(sizeof(struct pbuf), ROS_MEM_ALIGN))
-#define MTU_PBUF_SIZE SIZEOF_STRUCT_PBUF + MAX_FRAME_SIZE + ETH_PAD_SIZE
+#define MTU_PBUF_SIZE (sizeof(struct pbuf) + MAX_FRAME_SIZE + ETH_PAD_SIZE)
 
 struct kmem_cache *pbuf_kcache;
 struct kmem_cache *mtupbuf_kcache;
 
 
 void pbuf_init(void){
 
 struct kmem_cache *pbuf_kcache;
 struct kmem_cache *mtupbuf_kcache;
 
 
 void pbuf_init(void){
-       printk("size of struct pbuf%d, %d \n", SIZEOF_STRUCT_PBUF, sizeof(struct pbuf));
-       printk("alignment %d\n", __alignof__(struct pbuf));
        pbuf_kcache = kmem_cache_create("pbuf", sizeof(struct pbuf),
                                                                        __alignof__(struct pbuf), 0, 0, 0);
   mtupbuf_kcache = kmem_cache_create("mtupbuf_kcache", MTU_PBUF_SIZE, 
        pbuf_kcache = kmem_cache_create("pbuf", sizeof(struct pbuf),
                                                                        __alignof__(struct pbuf), 0, 0, 0);
   mtupbuf_kcache = kmem_cache_create("mtupbuf_kcache", MTU_PBUF_SIZE, 
@@ -126,7 +123,7 @@ struct pbuf *pbuf_alloc(pbuf_layer layer, uint16_t length, pbuf_type type)
     if (p == NULL) {
       return NULL;
     }
     if (p == NULL) {
       return NULL;
     }
-    p->payload = (void *)((uint8_t *)p + SIZEOF_STRUCT_PBUF + offset);
+    p->payload = (void *)((uint8_t *)p + sizeof(struct pbuf) + offset);
                STAILQ_NEXT(p, next) = NULL;
                p->type = type;
                p->alloc_len = MTU_PBUF_SIZE;
                STAILQ_NEXT(p, next) = NULL;
                p->type = type;
                p->alloc_len = MTU_PBUF_SIZE;
@@ -135,14 +132,14 @@ struct pbuf *pbuf_alloc(pbuf_layer layer, uint16_t length, pbuf_type type)
 
        case PBUF_RAM:
     /* If pbuf is to be allocated in RAM, allocate memory for it. */
 
        case PBUF_RAM:
     /* If pbuf is to be allocated in RAM, allocate memory for it. */
-               buf_size =  (SIZEOF_STRUCT_PBUF + offset) + MEM_ALIGN_SIZE(length);
+    buf_size =  (sizeof(struct pbuf) + offset) + ROUNDUP(length, sizeof(void*));
     p = (struct pbuf*)kmalloc(buf_size, 0);
 
     if (p == NULL) {
       return NULL;
     }
     /* Set up internal structure of the pbuf. */
     p = (struct pbuf*)kmalloc(buf_size, 0);
 
     if (p == NULL) {
       return NULL;
     }
     /* Set up internal structure of the pbuf. */
-    p->payload = (void *)((uint8_t *)p + SIZEOF_STRUCT_PBUF + offset);
+    p->payload = (void *)((uint8_t *)p + sizeof(struct pbuf) + offset);
     p->alloc_len = p->len = p->tot_len = length;
                STAILQ_NEXT(p, next) = NULL;
     p->type = type;
     p->alloc_len = p->len = p->tot_len = length;
                STAILQ_NEXT(p, next) = NULL;
     p->type = type;
@@ -383,7 +380,7 @@ int pbuf_header(struct pbuf *p, int delta){ // increase header size
     /* set new payload pointer */
     p->payload = (uint8_t *)p->payload - delta;
     /* boundary check fails? */
     /* set new payload pointer */
     p->payload = (uint8_t *)p->payload - delta;
     /* boundary check fails? */
-    if ((uint8_t *)p->payload < (uint8_t *)p + SIZEOF_STRUCT_PBUF) {
+    if ((uint8_t *)p->payload < (uint8_t *)p + sizeof(struct pbuf)) {
       /* restore old payload pointer */
       p->payload = payload;
                        warn("boundary failed \n");
       /* restore old payload pointer */
       p->payload = payload;
                        warn("boundary failed \n");
index 87afdb7..d6ba7f1 100644 (file)
@@ -237,7 +237,7 @@ tcp_pbuf_prealloc(pbuf_layer layer, uint16_t length, uint16_t max_length,
          (!first_seg ||
           pcb->unsent != NULL ||
           pcb->unacked != NULL))) {
          (!first_seg ||
           pcb->unsent != NULL ||
           pcb->unacked != NULL))) {
-      alloc = MIN(max_length, MEM_ALIGN_SIZE(length + TCP_OVERSIZE));
+      alloc = MIN(max_length, ROUNDUP(length + TCP_OVERSIZE, sizeof(void*)));
     }
   }
 #endif /* LWIP_NETIF_TX_SINGLE_PBUF */
     }
   }
 #endif /* LWIP_NETIF_TX_SINGLE_PBUF */
@@ -764,7 +764,8 @@ tcp_enqueue_flags(struct tcp_pcb *pcb, uint8_t flags)
     //TCP_STATS_INC(tcp.memerr);
     return -ENOMEM;
   }
     //TCP_STATS_INC(tcp.memerr);
     return -ENOMEM;
   }
-  LWIP_ASSERT("seg->tcphdr not aligned", ((uint32_t)seg->tcphdr % 4) == 0);
+  LWIP_ASSERT("seg->tcphdr not aligned",
+              ((uintptr_t)seg->tcphdr % sizeof(void*)) == 0);
   LWIP_ASSERT("tcp_enqueue_flags: invalid segment length", seg->len == 0);
 
   LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_TRACE,
   LWIP_ASSERT("tcp_enqueue_flags: invalid segment length", seg->len == 0);
 
   LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_TRACE,
@@ -1059,7 +1060,8 @@ tcp_output_segment(struct tcp_seg *seg, struct tcp_pcb *pcb)
 
   /* Add any requested options.  NB MSS option is only set on SYN
      packets, so ignore it here */
 
   /* Add any requested options.  NB MSS option is only set on SYN
      packets, so ignore it here */
-  LWIP_ASSERT("seg->tcphdr not aligned", ((uint32_t)seg->tcphdr % 4) == 0);
+  LWIP_ASSERT("seg->tcphdr not aligned",
+              ((uintptr_t)seg->tcphdr % sizeof(void*)) == 0);
   opts = (uint32_t *)(void *)(seg->tcphdr + 1);
   if (seg->flags & TF_SEG_OPTS_MSS) {
     TCP_BUILD_MSS_OPTION(*opts);
   opts = (uint32_t *)(void *)(seg->tcphdr + 1);
   if (seg->flags & TF_SEG_OPTS_MSS) {
     TCP_BUILD_MSS_OPTION(*opts);