Author: zwoop
Date: Wed Sep 14 02:28:52 2011
New Revision: 1170416

URL: http://svn.apache.org/viewvc?rev=1170416&view=rev
Log:
TS-567 Standardize the use of ats_memalign, and use it for FBSD / Darwin

Modified:
    trafficserver/traffic/trunk/iocore/cache/Cache.cc
    trafficserver/traffic/trunk/iocore/cache/CacheDir.cc
    trafficserver/traffic/trunk/iocore/cache/CacheDisk.cc
    trafficserver/traffic/trunk/iocore/eventsystem/P_IOBuffer.h
    trafficserver/traffic/trunk/iocore/hostdb/MultiCache.cc
    trafficserver/traffic/trunk/lib/ts/ink_memory.cc
    trafficserver/traffic/trunk/lib/ts/ink_port.h
    trafficserver/traffic/trunk/lib/ts/ink_queue.cc

Modified: trafficserver/traffic/trunk/iocore/cache/Cache.cc
URL: 
http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/cache/Cache.cc?rev=1170416&r1=1170415&r2=1170416&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/cache/Cache.cc (original)
+++ trafficserver/traffic/trunk/iocore/cache/Cache.cc Wed Sep 14 02:28:52 2011
@@ -130,9 +130,10 @@ struct VolInitInfo
   VolInitInfo()
   {
     recover_pos = 0;
-    if ((vol_h_f = (char *) valloc(4 * STORE_BLOCK_SIZE)) != NULL)
-      memset(vol_h_f, 0, 4 * STORE_BLOCK_SIZE);
+    vol_h_f = (char *)ats_memalign(sysconf(_SC_PAGESIZE), 4 * 
STORE_BLOCK_SIZE);
+    memset(vol_h_f, 0, 4 * STORE_BLOCK_SIZE);
   }
+
   ~VolInitInfo()
   {
     for (int i = 0; i < 4; i++) {
@@ -1061,21 +1062,7 @@ Vol::init(char *s, off_t blocks, off_t d
   evacuate = (DLL<EvacuationBlock> *)ats_malloc(evac_len);
   memset(evacuate, 0, evac_len);
 
-#if !defined (_WIN32)
-  raw_dir = (char *) valloc(vol_dirlen(this));
-#else
-  /* the directory should be page aligned for raw disk transfers.
-     WIN32 does not support valloc
-     or memalign, so we need to allocate extra space and then align the
-     pointer ourselves.
-     Don't need to keep track of the pointer to the original memory since
-     we never free this */
-  size_t alignment = getpagesize();
-  size_t mem_to_alloc = vol_dirlen(this) + (alignment - 1);
-  raw_dir = (char *)ats_malloc(mem_to_alloc);
-  raw_dir = (char *) align_pointer_forward(raw_dir, alignment);
-#endif
-
+  raw_dir = (char *)ats_memalign(sysconf(_SC_PAGESIZE), vol_dirlen(this));
   dir = (Dir *) (raw_dir + vol_headerlen(this));
   header = (VolHeaderFooter *) raw_dir;
   footer = (VolHeaderFooter *) (raw_dir + vol_dirlen(this) - 
ROUND_TO_STORE_BLOCK(sizeof(VolHeaderFooter)));
@@ -1225,12 +1212,7 @@ Vol::handle_recover_from_data(int event,
       recover_wrapped = 1;
       recover_pos = start;
     }
-#if defined(_WIN32)
-    io.aiocb.aio_buf = (char *)ats_malloc(RECOVERY_SIZE);
-#else
-    io.aiocb.aio_buf = (char *) valloc(RECOVERY_SIZE);
-#endif
-    io.aiocb.aio_nbytes = RECOVERY_SIZE;
+    io.aiocb.aio_buf = (char *)ats_memalign(sysconf(_SC_PAGESIZE), 
RECOVERY_SIZE);
     if ((off_t)(recover_pos + io.aiocb.aio_nbytes) > (off_t)(skip + len))
       io.aiocb.aio_nbytes = (skip + len) - recover_pos;
   } else if (event == AIO_EVENT_DONE) {

Modified: trafficserver/traffic/trunk/iocore/cache/CacheDir.cc
URL: 
http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/cache/CacheDir.cc?rev=1170416&r1=1170415&r2=1170416&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/cache/CacheDir.cc (original)
+++ trafficserver/traffic/trunk/iocore/cache/CacheDir.cc Wed Sep 14 02:28:52 
2011
@@ -941,7 +941,7 @@ sync_cache_dir_on_shutdown(void)
     if (buflen < dirlen) {
       if (buf)
         ats_memalign_free(buf);
-      buf = (char *)ats_memalign(sysconf(_SC_PAGESIZE), dirlen);       // buf 
= (char*) valloc (dirlen);
+      buf = (char *)ats_memalign(sysconf(_SC_PAGESIZE), dirlen);
       buflen = dirlen;
     }
 

Modified: trafficserver/traffic/trunk/iocore/cache/CacheDisk.cc
URL: 
http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/cache/CacheDisk.cc?rev=1170416&r1=1170415&r2=1170416&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/cache/CacheDisk.cc (original)
+++ trafficserver/traffic/trunk/iocore/cache/CacheDisk.cc Wed Sep 14 02:28:52 
2011
@@ -55,12 +55,7 @@ CacheDisk::open(char *s, off_t blocks, o
   start = skip + header_len;
   num_usable_blocks = (off_t(len * STORE_BLOCK_SIZE) - (start - askip)) >> 
STORE_BLOCK_SHIFT;
 
-#if defined(_WIN32)
-  header = (DiskHeader *)ats_malloc(header_len);
-#else
-  header = (DiskHeader *) valloc(header_len);
-#endif
-
+  header = (DiskHeader *)ats_memalign(sysconf(_SC_PAGESIZE), header_len);
   memset(header, 0, header_len);
   if (clear) {
     SET_HANDLER(&CacheDisk::clearDone);

Modified: trafficserver/traffic/trunk/iocore/eventsystem/P_IOBuffer.h
URL: 
http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/eventsystem/P_IOBuffer.h?rev=1170416&r1=1170415&r2=1170416&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/eventsystem/P_IOBuffer.h (original)
+++ trafficserver/traffic/trunk/iocore/eventsystem/P_IOBuffer.h Wed Sep 14 
02:28:52 2011
@@ -291,8 +291,7 @@ IOBufferData::alloc(int64_t size_index, 
       _data = (char *) ioBufAllocator[size_index].alloc_void();
     // coverity[dead_error_condition]
     else if (BUFFER_SIZE_INDEX_IS_XMALLOCED(size_index))
-      // coverity[dead_error_line]
-      _data = (char *) valloc(index_to_buffer_size(size_index));
+      _data = (char *)ats_memalign(sysconf(_SC_PAGESIZE), 
index_to_buffer_size(size_index));
     break;
   default:
   case DEFAULT_ALLOC:

Modified: trafficserver/traffic/trunk/iocore/hostdb/MultiCache.cc
URL: 
http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/hostdb/MultiCache.cc?rev=1170416&r1=1170415&r2=1170416&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/hostdb/MultiCache.cc (original)
+++ trafficserver/traffic/trunk/iocore/hostdb/MultiCache.cc Wed Sep 14 02:28:52 
2011
@@ -385,7 +385,7 @@ MultiCacheBase::mmap_data(bool private_f
   // open files
   //
   if (!store || !store->n_disks)
-    goto Lvalloc;
+    goto Lalloc;
   for (i = 0; i < store->n_disks; i++) {
     Span *ds = store->disk[i];
     for (int j = 0; j < store->disk[i]->paths(); j++) {
@@ -400,7 +400,7 @@ MultiCacheBase::mmap_data(bool private_f
       if (fds[n_fds] < 0) {
         if (!zero_fill) {
           Warning("unable to open file '%s': %d, %s", path, errno, 
strerror(errno));
-          goto Lvalloc;
+          goto Lalloc;
         }
         fds[n_fds] = 0;
       }
@@ -408,7 +408,7 @@ MultiCacheBase::mmap_data(bool private_f
         if (zorch_file(path, fds[n_fds], (int64_t) d->blocks * (int64_t) 
STORE_BLOCK_SIZE, 0)) {
           Warning("unable to set file size '%s' to %" PRId64 ": %d, %s",
                   (int64_t) d->blocks * STORE_BLOCK_SIZE, path, errno, 
strerror(errno));
-          goto Lvalloc;
+          goto Lalloc;
         }
       }
       n_fds++;
@@ -510,12 +510,13 @@ MultiCacheBase::mmap_data(bool private_f
     if (fds[i] >= 0)
       ink_assert(!socketManager.close(fds[i]));
   return 0;
-Lvalloc:
+Lalloc:
   {
     if (data)
       free(data);
     char *cur = 0;
-    data = (char *) valloc(totalsize);
+
+    data = (char *)ats_memalign(sysconf(_SC_PAGESIZE), totalsize);
     cur = data + STORE_BLOCK_SIZE * blocks_in_level(0);
     if (levels > 1)
       cur = data + STORE_BLOCK_SIZE * blocks_in_level(1);

Modified: trafficserver/traffic/trunk/lib/ts/ink_memory.cc
URL: 
http://svn.apache.org/viewvc/trafficserver/traffic/trunk/lib/ts/ink_memory.cc?rev=1170416&r1=1170415&r2=1170416&view=diff
==============================================================================
--- trafficserver/traffic/trunk/lib/ts/ink_memory.cc (original)
+++ trafficserver/traffic/trunk/lib/ts/ink_memory.cc Wed Sep 14 02:28:52 2011
@@ -82,19 +82,11 @@ ats_realloc(void *ptr, size_t size)
   return newptr;
 }                               /* End ats_realloc */
 
-void
-ats_memalign_free(void *ptr)
-{
-  if (likely(ptr)) {
-    ats_free(ptr);
-  }
-}
-
+// TODO: For Win32 platforms, we need to figure out what to do with memalign.
+// The older code had ifdef's around such calls, turning them into 
ats_malloc().
 void *
 ats_memalign(size_t alignment, size_t size)
 {
-#ifndef NO_MEMALIGN
-
   void *ptr;
 
 #if TS_HAS_POSIX_MEMALIGN
@@ -102,6 +94,7 @@ ats_memalign(size_t alignment, size_t si
     return ats_malloc(size);
 
   int retcode = posix_memalign(&ptr, alignment, size);
+
   if (unlikely(retcode)) {
     if (retcode == EINVAL) {
       ink_fatal(1, "ats_memalign: couldn't allocate %d bytes at alignment %d - 
invalid alignment parameter",
@@ -121,38 +114,6 @@ ats_memalign(size_t alignment, size_t si
   }
 #endif
   return ptr;
-#else
-#if defined(freebsd) || defined(darwin)
-  /*
-   * DEC malloc calims to align for "any allocatable type",
-   * and the following code checks that.
-   */
-  switch (alignment) {
-  case 1:
-  case 2:
-  case 4:
-  case 8:
-  case 16:
-    return ats_malloc(size);
-  case 32:
-  case 64:
-  case 128:
-  case 256:
-  case 512:
-  case 1024:
-  case 2048:
-  case 4096:
-  case 8192:
-    return valloc(size);
-  default:
-    abort();
-    break;
-  }
-# else
-#       error "Need a memalign"
-# endif
-#endif /* #ifndef NO_MEMALIGN */
-  return NULL;
 }                               /* End ats_memalign */
 
 void
@@ -169,3 +130,11 @@ ats_free_null(void *ptr)
     free(ptr);
   return NULL;
 }                               /* End ats_free_null */
+
+void
+ats_memalign_free(void *ptr)
+{
+  if (likely(ptr)) {
+    free(ptr);
+  }
+}

Modified: trafficserver/traffic/trunk/lib/ts/ink_port.h
URL: 
http://svn.apache.org/viewvc/trafficserver/traffic/trunk/lib/ts/ink_port.h?rev=1170416&r1=1170415&r2=1170416&view=diff
==============================================================================
--- trafficserver/traffic/trunk/lib/ts/ink_port.h (original)
+++ trafficserver/traffic/trunk/lib/ts/ink_port.h Wed Sep 14 02:28:52 2011
@@ -76,12 +76,7 @@
 #endif
 #endif
 
-#if defined(freebsd)
-#define NO_MEMALIGN
-#endif
-
 #if defined(darwin)
-#define NO_MEMALIGN
 #define RENTRENT_GETHOSTBYNAME
 #define RENTRENT_GETHOSTBYADDR
 #endif

Modified: trafficserver/traffic/trunk/lib/ts/ink_queue.cc
URL: 
http://svn.apache.org/viewvc/trafficserver/traffic/trunk/lib/ts/ink_queue.cc?rev=1170416&r1=1170415&r2=1170416&view=diff
==============================================================================
--- trafficserver/traffic/trunk/lib/ts/ink_queue.cc (original)
+++ trafficserver/traffic/trunk/lib/ts/ink_queue.cc Wed Sep 14 02:28:52 2011
@@ -250,7 +250,6 @@ ink_freelist_new(InkFreeList * f)
 #endif /* MEMPROTECT */
 
       void *newp = NULL;
-#ifndef NO_MEMALIGN
 #ifdef DEBUG
       char *oldsbrk = (char *) sbrk(0), *newsbrk = NULL;
 #endif
@@ -266,21 +265,6 @@ ink_freelist_new(InkFreeList * f)
          newsbrk - oldsbrk, fastmemtotal); */
 #endif
       SET_FREELIST_POINTER_VERSION(item, newp, 0);
-#else
-      uintptr_t add;
-      uintptr_t mask;
-      if (f->alignment) {
-        add = f->alignment - 1;
-        mask = ~(uintptr_t) add;
-      } else {
-        add = 0;
-        mask = ~0;
-      }
-      newp = ats_malloc(f->chunk_size * type_size + add);
-      fl_memadd(f->chunk_size * type_size + add);
-      newp = (void *) ((((uintptr_t) newp) + add) & mask);
-      SET_FREELIST_POINTER_VERSION(item, newp, 0);
-#endif
 
 #if !defined(INK_USE_MUTEX_FOR_FREELISTS)
       ink_atomic_increment((int *) &f->allocated, f->chunk_size);


Reply via email to