Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/external/bsd/vchiq/dist/interface/vchiq_arm Remove #if 0...



details:   https://anonhg.NetBSD.org/src/rev/f5ae30575743
branches:  trunk
changeset: 328128:f5ae30575743
user:      skrll <skrll%NetBSD.org@localhost>
date:      Thu Mar 27 10:11:04 2014 +0000

description:
Remove #if 0'ed code.

diffstat:

 sys/external/bsd/vchiq/dist/interface/vchiq_arm/vchiq_2835_arm.c |  199 +---------
 1 files changed, 7 insertions(+), 192 deletions(-)

diffs (213 lines):

diff -r 9708d220af30 -r f5ae30575743 sys/external/bsd/vchiq/dist/interface/vchiq_arm/vchiq_2835_arm.c
--- a/sys/external/bsd/vchiq/dist/interface/vchiq_arm/vchiq_2835_arm.c  Thu Mar 27 07:59:17 2014 +0000
+++ b/sys/external/bsd/vchiq/dist/interface/vchiq_arm/vchiq_2835_arm.c  Thu Mar 27 10:11:04 2014 +0000
@@ -251,6 +251,13 @@
        int             size;
 } BULKINFO_T;
 
+/* There is a potential problem with partial cache lines (pages?)
+** at the ends of the block when reading. If the CPU accessed anything in
+** the same line (page?) then it may have pulled old data into the cache,
+** obscuring the new data underneath. We can solve this by transferring the
+** partial cache lines separately, and allowing the ARM to copy into the
+** cached area.
+*/
 VCHIQ_STATUS_T
 vchiq_prepare_bulk_data(VCHIQ_BULK_T *bulk, VCHI_MEM_HANDLE_T memhandle,
        void *buf, int size, int dir)
@@ -554,195 +561,3 @@
 {
        (void)state;
 }
-/*
- * Local functions
- */
-
-/* There is a potential problem with partial cache lines (pages?)
-** at the ends of the block when reading. If the CPU accessed anything in
-** the same line (page?) then it may have pulled old data into the cache,
-** obscuring the new data underneath. We can solve this by transferring the
-** partial cache lines separately, and allowing the ARM to copy into the
-** cached area.
-
-** N.B. This implementation plays slightly fast and loose with the Linux
-** driver programming rules, e.g. its use of __virt_to_bus instead of
-** dma_map_single, but it isn't a multi-platform driver and it benefits
-** from increased speed as a result.
-*/
-
-#if 0
-static int
-create_pagelist(char __user *buf, size_t count, unsigned short type,
-       struct task_struct *task, PAGELIST_T ** ppagelist)
-{
-       PAGELIST_T *pagelist;
-       struct page **pages;
-       struct page *page;
-       unsigned long *addrs;
-       unsigned int num_pages, offset, i;
-       char *addr, *base_addr, *next_addr;
-       int run, addridx, actual_pages;
-
-       offset = (unsigned int)buf & (PAGE_SIZE - 1);
-       num_pages = (count + offset + PAGE_SIZE - 1) / PAGE_SIZE;
-
-       *ppagelist = NULL;
-
-       /* Allocate enough storage to hold the page pointers and the page
-       ** list
-       */
-       pagelist = kmalloc(sizeof(PAGELIST_T) +
-               (num_pages * sizeof(unsigned long)) +
-               (num_pages * sizeof(pages[0])),
-               GFP_KERNEL);
-
-       vchiq_log_trace(vchiq_arm_log_level,
-               "create_pagelist - %x", (unsigned int)pagelist);
-       if (!pagelist)
-               return -ENOMEM;
-
-       addrs = pagelist->addrs;
-       pages = (struct page **)(addrs + num_pages);
-
-       down_read(&task->mm->mmap_sem);
-       actual_pages = get_user_pages(task, task->mm,
-               (unsigned long)buf & ~(PAGE_SIZE - 1), num_pages,
-               (type == PAGELIST_READ) /*Write */ , 0 /*Force */ ,
-               pages, NULL /*vmas */);
-       up_read(&task->mm->mmap_sem);
-
-   if (actual_pages != num_pages)
-   {
-      /* This is probably due to the process being killed */
-      while (actual_pages > 0)
-      {
-         actual_pages--;
-         page_cache_release(pages[actual_pages]);
-      }
-      kfree(pagelist);
-      if (actual_pages == 0)
-         actual_pages = -ENOMEM;
-      return actual_pages;
-       }
-
-       pagelist->length = count;
-       pagelist->type = type;
-       pagelist->offset = offset;
-
-       /* Group the pages into runs of contiguous pages */
-
-       base_addr = VCHIQ_ARM_ADDRESS(page_address(pages[0]));
-       next_addr = base_addr + PAGE_SIZE;
-       addridx = 0;
-       run = 0;
-
-       for (i = 1; i < num_pages; i++) {
-               addr = VCHIQ_ARM_ADDRESS(page_address(pages[i]));
-               if ((addr == next_addr) && (run < (PAGE_SIZE - 1))) {
-                       next_addr += PAGE_SIZE;
-                       run++;
-               } else {
-                       addrs[addridx] = (unsigned long)base_addr + run;
-                       addridx++;
-                       base_addr = addr;
-                       next_addr = addr + PAGE_SIZE;
-                       run = 0;
-               }
-       }
-
-       addrs[addridx] = (unsigned long)base_addr + run;
-       addridx++;
-
-       /* Partial cache lines (fragments) require special measures */
-       if ((type == PAGELIST_READ) &&
-               ((pagelist->offset & (CACHE_LINE_SIZE - 1)) ||
-               ((pagelist->offset + pagelist->length) &
-               (CACHE_LINE_SIZE - 1)))) {
-               FRAGMENTS_T *fragments;
-
-               if (down_interruptible(&g_free_fragments_sema) != 0) {
-                       kfree(pagelist);
-                       return -EINTR;
-               }
-
-               WARN_ON(g_free_fragments == NULL);
-
-               down(&g_free_fragments_mutex);
-               fragments = (FRAGMENTS_T *) g_free_fragments;
-               WARN_ON(fragments == NULL);
-               g_free_fragments = *(FRAGMENTS_T **) g_free_fragments;
-               up(&g_free_fragments_mutex);
-               pagelist->type =
-                        PAGELIST_READ_WITH_FRAGMENTS + (fragments -
-                                                        g_fragments_base);
-       }
-
-       for (page = virt_to_page(pagelist);
-               page <= virt_to_page(addrs + num_pages - 1); page++) {
-               flush_dcache_page(page);
-       }
-
-       *ppagelist = pagelist;
-
-       return 0;
-}
-
-static void
-free_pagelist(PAGELIST_T *pagelist, int actual)
-{
-       struct page **pages;
-       unsigned int num_pages, i;
-
-       vchiq_log_trace(vchiq_arm_log_level,
-               "free_pagelist - %x, %d", (unsigned int)pagelist, actual);
-
-       num_pages =
-               (pagelist->length + pagelist->offset + PAGE_SIZE - 1) /
-               PAGE_SIZE;
-
-       pages = (struct page **)(pagelist->addrs + num_pages);
-
-       /* Deal with any partial cache lines (fragments) */
-       if (pagelist->type >= PAGELIST_READ_WITH_FRAGMENTS) {
-               FRAGMENTS_T *fragments = g_fragments_base +
-                       (pagelist->type - PAGELIST_READ_WITH_FRAGMENTS);
-               int head_bytes, tail_bytes;
-               head_bytes = (CACHE_LINE_SIZE - pagelist->offset) &
-                       (CACHE_LINE_SIZE - 1);
-               tail_bytes = (pagelist->offset + actual) &
-                       (CACHE_LINE_SIZE - 1);
-
-               if ((actual >= 0) && (head_bytes != 0)) {
-                       if (head_bytes > actual)
-                               head_bytes = actual;
-
-                       memcpy((char *)page_address(pages[0]) +
-                               pagelist->offset,
-                               fragments->headbuf,
-                               head_bytes);
-               }
-               if ((actual >= 0) && (head_bytes < actual) &&
-                       (tail_bytes != 0)) {
-                       memcpy((char *)page_address(pages[num_pages - 1]) +
-                               ((pagelist->offset + actual) &
-                               (PAGE_SIZE - 1) & ~(CACHE_LINE_SIZE - 1)),
-                                        fragments->tailbuf, tail_bytes);
-               }
-
-               down(&g_free_fragments_mutex);
-               *(FRAGMENTS_T **) fragments = g_free_fragments;
-               g_free_fragments = fragments;
-               up(&g_free_fragments_mutex);
-               up(&g_free_fragments_sema);
-       }
-
-       for (i = 0; i < num_pages; i++) {
-               if (pagelist->type != PAGELIST_WRITE)
-                       set_page_dirty(pages[i]);
-               page_cache_release(pages[i]);
-       }
-
-       kfree(pagelist);
-}
-#endif



Home | Main Index | Thread Index | Old Index