This is an automated email from the ASF dual-hosted git repository. liuyizhi pushed a commit to branch v0.6 in repository https://gitbox.apache.org/repos/asf/incubator-tvm.git
commit f552d4df8c356f5bb6b7fbef9b9cdac65d674d54 Author: Tianqi Chen <[email protected]> AuthorDate: Tue Nov 26 15:58:13 2019 -0800 [RELEASE] Update copyright message, change notice, remove cma kernel module for now (#4431) --- 3rdparty/cma/Makefile | 39 --- 3rdparty/cma/cma.c | 555 ------------------------------------ 3rdparty/compiler-rt/builtin_fp16.h | 2 - NOTICE | 3 +- 4 files changed, 1 insertion(+), 598 deletions(-) diff --git a/3rdparty/cma/Makefile b/3rdparty/cma/Makefile deleted file mode 100644 index 0f19b0c..0000000 --- a/3rdparty/cma/Makefile +++ /dev/null @@ -1,39 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -PATH_SETTINGS?=$(PWD)/settings.mk - -# Driver configuration file -include $(PATH_SETTINGS) - -ifeq ($(KERNELRELEASE),) -# kbuild - -default: - make ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) -C $(KSOURCE_DIR) M=`pwd` modules - -clean: - make -C $(KSOURCE_DIR) M=`pwd` clean - -else -# run from Kernel Makefile - -obj-m := cma.o -ccflags-y := -DDRIVER_NODE_NAME="\"$(DRIVER_NODE_NAME)\"" \ - -DCMA_DEBUG=$(CMA_DEBUG) \ - -DCMA_IOC_MAGIC=$(CMA_IOC_MAGIC) -endif diff --git a/3rdparty/cma/cma.c b/3rdparty/cma/cma.c deleted file mode 100644 index 72d2913..0000000 --- a/3rdparty/cma/cma.c +++ /dev/null @@ -1,555 +0,0 @@ -/* cma.c - ARM specific Linux driver for allocating physically contigious memory. - * - * The MIT License (MIT) - * - * COPYRIGHT (C) 2017 Institute of Electronics and Computer Science (EDI), Latvia. - * AUTHOR: Rihards Novickis ([email protected]) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - * - * DESCRIPTION: - * In some DMA use cases there is a need or it is more efficient to use large - * physically contigous memory regions. When Linux kernel is compiled with CMA - * (Contigous Memory Allocator) feature, this module allows to allocate this - * contigous memory and pass it to the user space. Memory can be either cached - * or uncached. - * - * For api description, see "cma_api.h" header file. - * - */ - -/* Linux driver includes */ -#include <linux/init.h> -#include <linux/module.h> -#include <linux/fs.h> -#include <linux/device.h> -#include <linux/slab.h> -#include <linux/uaccess.h> -#include <linux/mutex.h> - -/* CMA specific includes */ -#include <linux/dma-mapping.h> -#include <linux/dma-contiguous.h> - -/* IOCTL description */ -#include "cma.h" - - -/* Handle defines */ -#ifndef CONFIG_DMA_CMA - #error "CMA configuration not set in kernel!" -#endif -#ifndef CMA_DEBUG - #define CMA_DEBUG 0 -#endif -#ifndef DRIVER_NODE_NAME - #define DRIVER_NODE_NAME "cma" -#endif - - -/* Commonly used printk statements */ -#define __ERROR(fmt, args...) printk(KERN_ERR "CMA_ERROR: " fmt, ##args) -#define __INFO(fmt, args...) printk(KERN_INFO "CMA_INFO: " fmt, ##args) - -#if CMA_DEBUG == 1 - #define __DEBUG(fmt, args...) printk(KERN_INFO "CMA_DEBUG: " fmt, ##args) -#else - #define __DEBUG(fmt, args...) -#endif - - -/* cma entry flags */ -#define CMA_ENTRY_CACHED 0 -#define CMA_ENTRY_MAPPED (1<<0) -#define CMA_ENTRY_NONCACHED (1<<1) - - -/* fops declarations */ -static int cma_ioctl(struct file *filp, unsigned int cmd, unsigned int arg); -static int cma_mmap(struct file *filp, struct vm_area_struct *vm_area_dscr); - -/* ioctl interface commands */ -static int cma_ioctl_alloc(struct file *filp, unsigned int cmd, unsigned int arg, int cached_flag); -static int cma_ioctl_free(struct file *filp, unsigned int cmd, unsigned int arg); -static int cma_ioctl_get_phy_addr(struct file *filp, unsigned int cmd, unsigned int arg); -static int cma_ioctl_get_size(struct file *filp, unsigned int cmd, unsigned int arg); - -/* CMA entry specific functions */ -struct cma_entry *cma_entry_get_by_phy_addr(unsigned int phy_addr); -struct cma_entry *cma_entry_get_by_v_usr_addr(unsigned v_usr_addr); -static int cma_entry_add(struct cma_entry *entry); -static int cma_entry_release(unsigned v_usr_addr); - -/* mmap ops declarations */ -void cma_mmap_close(struct vm_area_struct *vma); - - -/* File operations */ -struct file_operations fops = { - .owner = THIS_MODULE, - .unlocked_ioctl = cma_ioctl, - .mmap = cma_mmap -}; - -/* mmap operation structure */ -static struct vm_operations_struct cma_ops = { - .close = cma_mmap_close -}; - - -/* List structure for containing memory allocation information */ -struct cma_entry{ - struct cma_entry *next; - pid_t pid; /* calling process id */ - unsigned size; /* size of allocation */ - dma_addr_t phy_addr; /* physical address */ - void *v_ptr; /* kernel-space pointer */ - unsigned v_usr_addr; /* user-space addr */ - int flags; /* memory allocation related flags */ -}; - - -/* Global variables */ -int major; -static struct class *class; -static struct device *device; -struct cma_entry *cma_start = NULL; -static struct mutex mutex_cma_list_modify; - - -struct cma_entry *cma_entry_get_by_phy_addr(unsigned int phy_addr) { - struct cma_entry *walk = cma_start; - - __DEBUG("cma_entry_get_by_phy_addr()\n"); - - if (mutex_lock_interruptible(&mutex_cma_list_modify)) - return NULL; - - /* search for physical address */ - while (walk != NULL) { - if (walk->phy_addr == phy_addr) { - goto leave; - } - walk = walk->next; - } - -leave: - mutex_unlock(&mutex_cma_list_modify); - return walk; -} - - -struct cma_entry *cma_entry_get_by_v_usr_addr(unsigned v_usr_addr) { - struct cma_entry *walk = cma_start; - - __DEBUG("cma_entry_get_by_v_usr_addr()\n"); - - if (mutex_lock_interruptible(&mutex_cma_list_modify)) { - __DEBUG("cma_entry_get_by_v_usr_addr: failed to call mutex_lock_interruptible().\n"); - return NULL; - } - - /* search for user virtual address */ - while (walk != NULL) { - if (walk->v_usr_addr == v_usr_addr) { - __DEBUG("found an entry with v_usr_addr (0x%x).\n", v_usr_addr); - goto leave; - } - __DEBUG("> walk->v_usr_addr=(0x%x), expected v_usr_addr=(0x%x).\n", - walk->v_usr_addr, v_usr_addr); - walk = walk->next; - } - __DEBUG("failed to find an entry with v_usr_addr (0x%x).\n", v_usr_addr); - -leave: - mutex_unlock(&mutex_cma_list_modify); - return walk; -} - - -static int cma_entry_add(struct cma_entry *entry) { - struct cma_entry *walk; - __DEBUG("cma_entry_add() - phy_addr 0x%x; pid 0x%x\n", entry->phy_addr, entry->pid); - - if (mutex_lock_interruptible(&mutex_cma_list_modify)) - return -EAGAIN; - - /* add entry in start - this is more effective */ - entry->next = cma_start; - cma_start = entry; - - /* print entry list for debugging */ - walk = cma_start; - while (walk != NULL) { - __DEBUG("> walk->phy_addr=(0x%x).\n", walk->phy_addr); - walk = walk->next; - } - - mutex_unlock(&mutex_cma_list_modify); - - return 0; -} - - -static int cma_entry_release(unsigned v_usr_addr) { - int err; - struct cma_entry *walk_prev, *walk_curr; - - /* print entry list for debugging */ - struct cma_entry *walk; - __DEBUG("cma_entry_release() - v_usr_addr 0x%x; pid 0x%x\n", v_usr_addr, current->pid); - - if (mutex_lock_interruptible(&mutex_cma_list_modify)) - return -EAGAIN; - - walk_prev = NULL; - walk_curr = cma_start; - - while (walk_curr != NULL) { - if (walk_curr->v_usr_addr == v_usr_addr) { - /* check if mapped */ - if (walk_curr->flags & CMA_ENTRY_MAPPED) { - __DEBUG("failed to find a valid entry with v_usr_addr(0x%x), entry mapped.\n", v_usr_addr); - err = -1; - goto leave; - } - - /* check if not the first entry */ - if (walk_prev != NULL) - walk_prev->next = walk_curr->next; - else - cma_start = walk_curr->next; - if ((walk_curr->next == NULL) && (cma_start == walk_curr)) - cma_start = NULL; - - __DEBUG("found an entry with v_usr_addr=0x%x, phy_addr=0x%x, next=0x%x\n", - v_usr_addr, walk_curr->phy_addr, (int)walk_curr->next); - dma_free_coherent(NULL, walk_curr->size, walk_curr->v_ptr, walk_curr->phy_addr); - kfree(walk_curr); - err = 0; - goto leave; - } - __DEBUG("skip entry with v_usr_addr (0x%x).\n", walk_curr->v_usr_addr); - - /* prepare next walk */ - walk_prev = walk_curr; - walk_curr = walk_curr->next; - } - - __DEBUG("failed to find an entry with v_usr_addr (0x%x).\n", v_usr_addr); - err = -1; - -leave: - - /* print entry list for debugging */ - walk = cma_start; - while (walk != NULL) { - __DEBUG("> walk->v_usr_addr=(0x%x), walk->next=0x%x\n", walk->v_usr_addr, (int)walk->next); - walk = walk->next; - } - - mutex_unlock(&mutex_cma_list_modify); - return err; -} - - -/* inline function for readability */ -inline int check_entry_accordance(struct cma_entry *entry, struct vm_area_struct *vma) { - if ( entry == NULL ) - return -EFAULT; - - if ( entry->phy_addr != vma->vm_pgoff << PAGE_SHIFT ) - return -EFAULT; - - if ( entry->size != vma->vm_end-vma->vm_start ) - return -EFAULT; - - if ( entry->pid != current->pid ) - return -EACCES; - - return 0; -} - -static int cma_mmap(struct file *filp, struct vm_area_struct *vma) { - int err; - struct cma_entry *entry; - - __DEBUG("cma_mmap() - phy_addr 0x%lx, v_user_addr 0x%lx\n", - vma->vm_pgoff << PAGE_SHIFT, vma->vm_start); - - entry = cma_entry_get_by_phy_addr(vma->vm_pgoff << PAGE_SHIFT); - - /* check if mmap is alligned with according entry */ - err = check_entry_accordance(entry, vma); - if (err) return err; - - /* set user address for later reference (used when freeing the memory ) */ - entry->v_usr_addr = vma->vm_start; - - /* should memory be uncached? */ - if ( entry->flags & CMA_ENTRY_NONCACHED ) - vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); - - /* map memory to user space */ - if (remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff, - vma->vm_end-vma->vm_start, vma->vm_page_prot)) { - up_write(¤t->mm->mmap_sem); - return -EAGAIN; - } - - /* save mmap ops and set entry mapped flag */ - vma->vm_ops = &cma_ops; - entry->flags = (entry->flags & (~CMA_ENTRY_MAPPED)) | CMA_ENTRY_MAPPED; - - return 0; -} - - -void cma_mmap_close(struct vm_area_struct *vma) { - struct cma_entry *entry; - - __DEBUG("cma_mmap_close()\n"); - - /* remove custom mapped flag */ - entry = cma_entry_get_by_phy_addr(vma->vm_pgoff << PAGE_SHIFT); - if ( entry != NULL ) - entry->flags &= (~CMA_ENTRY_MAPPED); -} - - -static int cma_ioctl(struct file *filp, unsigned int cmd, unsigned int arg) { - /* routine check */ - __DEBUG("IOCTL command issued\n"); - - /* check validity of the cmd */ - if (_IOC_TYPE(cmd) != CMA_IOCTL_MAGIC) { - __ERROR("IOCTL Incorrect magic number\n"); - return -ENOTTY; - } - if (_IOC_NR(cmd) > CMA_IOCTL_MAXNR) { - __ERROR("IOCTL Command is not valid\n"); - return -ENOTTY; - } - - /* get size from userspace */ - switch (cmd) { - case CMA_ALLOC_CACHED: - return cma_ioctl_alloc(filp, cmd, arg, CMA_ENTRY_CACHED); - case CMA_ALLOC_NONCACHED: - return cma_ioctl_alloc(filp, cmd, arg, CMA_ENTRY_NONCACHED); - case CMA_FREE: - return cma_ioctl_free(filp, cmd, arg); - case CMA_GET_PHY_ADDR: - return cma_ioctl_get_phy_addr(filp, cmd, arg); - case CMA_GET_SIZE: - return cma_ioctl_get_size(filp, cmd, arg); - default: - __DEBUG("This should never happen!\n"); - } - - return 0; -} - - -static int cma_ioctl_alloc(struct file *filp, unsigned int cmd, unsigned int arg, int cached_flag) { - int err; - struct cma_entry *entry; - __DEBUG("cma_ioctl_alloc() called!\n"); - - if (!access_ok(VERIFY_READ, (void __user*) arg, _IOC_SIZE(cmd))) { - __DEBUG("fail to get read access to %d bytes of memory.\n", entry->size); - return -EFAULT; - } - if (!access_ok(VERIFY_WRITE, (void __user*) arg, _IOC_SIZE(cmd))) { - __DEBUG("fail to get write access to %d bytes of memory.\n", entry->size); - return -EFAULT; - } - - /* create new cma entry */ - entry = kmalloc(sizeof(struct cma_entry), GFP_KERNEL); - - /* set entry params */ - __get_user(entry->size, (typeof(&entry->size))arg); - entry->pid = current->pid; - entry->flags = cached_flag; - - /* allocate contigous memory */ - entry->v_ptr = dma_alloc_coherent(NULL, entry->size, &entry->phy_addr, GFP_KERNEL); - if ( entry->v_ptr == NULL ) { - err = -ENOMEM; - __DEBUG("==== FAILED TO ALLOCATE 0x%X BYTES OF COHERENT MEMORY ====\n", entry->size); - goto error_dma_alloc_coherent; - } - - /* add entry */ - err = cma_entry_add(entry); - if (err) goto error_cma_entry_add; - - /* put physical address to user space */ - __put_user(entry->phy_addr, (typeof(&entry->phy_addr))arg); - - __DEBUG("allocated 0x%x bytes of coherent memory at phy_addr=0x%x\n", entry->size, entry->phy_addr); - return entry->phy_addr; - - -error_cma_entry_add: - dma_free_coherent(NULL, entry->size, entry->v_ptr, entry->phy_addr); - -error_dma_alloc_coherent: - kfree(entry); - - return err; -} - - -static int cma_ioctl_free(struct file *filp, unsigned int cmd, unsigned int arg) { - dma_addr_t v_usr_addr; - __DEBUG("cma_ioctl_free() called!\n"); - - if (!access_ok(VERIFY_READ, (void __user*) arg, _IOC_SIZE(cmd))) - return -EFAULT; - - __get_user(v_usr_addr, (typeof(&v_usr_addr))arg); - - return cma_entry_release(v_usr_addr); -} - - -static struct cma_entry *cma_ioctl_get_entry_from_v_usr_addr(unsigned int cmd, unsigned int arg) { - unsigned v_usr_addr; - - __DEBUG("cma_ioctl_get_entry_from_v_usr_addr() called!\n"); - - /* routine check */ - if (!access_ok(VERIFY_READ, (void __user*) arg, _IOC_SIZE(cmd))) { - __DEBUG("failed to get read access to virtual user address: 0x%x\n", arg); - return NULL; - } - if (!access_ok(VERIFY_WRITE, (void __user*) arg, _IOC_SIZE(cmd))) { - __DEBUG("failed to get write access to virtual user address: 0x%x\n", arg); - return NULL; - } - - /* get process user address */ - __get_user(v_usr_addr, (typeof(&v_usr_addr))arg); - - /* search for appropriate entry */ - return cma_entry_get_by_v_usr_addr(v_usr_addr); -} - - -static int cma_ioctl_get_phy_addr(struct file *filp, unsigned int cmd, unsigned int arg) { - struct cma_entry *entry; - - __DEBUG("cma_ioctl_get_phy_addr() called!\n"); - - /* get entry */ - entry = cma_ioctl_get_entry_from_v_usr_addr(cmd, arg); - if (entry == NULL) { - __DEBUG("cma entry has not been found.\n"); - return -EFAULT; - } - - /* put physical address into user space */ - __put_user(entry->phy_addr, (typeof(&entry->phy_addr))arg); - - return 0; -} - - -static int cma_ioctl_get_size(struct file *filp, unsigned int cmd, unsigned int arg) { - struct cma_entry *entry; - - __DEBUG("cma_ioctl_get_size() called!\n"); - - /* get entry */ - entry = cma_ioctl_get_entry_from_v_usr_addr(cmd, arg); - if (entry == NULL) { - __DEBUG("cma_ioctl_get_size: failed to get_entry_from_v_usr_addr.\n"); - return -EFAULT; - } - - /* put size into user space */ - __put_user(entry->size, (typeof(&entry->size))arg); - - return 0; -} - - -static int cma_init(void) { - int err; - __INFO("Initializeing Contigous Memory Allocator module\n"); - - /* obtain major number */ - major = register_chrdev(0, DRIVER_NODE_NAME, &fops); - if ( major < 0 ) { - __ERROR("Failed to allocate major number\n"); - return -major; - } - - /* create class */ - class = class_create(THIS_MODULE, DRIVER_NODE_NAME); - if ( IS_ERR(class) ) { - __ERROR("Failed to create class\n"); - err = PTR_ERR(class); - goto error_class_create; - } - - /* create device node */ - device = device_create(class, NULL, MKDEV(major, 0), NULL, DRIVER_NODE_NAME); - if ( IS_ERR(device) ) { - __ERROR("Failed to create device\n"); - err = PTR_ERR(device); - goto error_device_create; - } - - mutex_init(&mutex_cma_list_modify); - - return 0; - - -error_device_create: - class_destroy(class); - -error_class_create: - unregister_chrdev(major, DRIVER_NODE_NAME); - - return err; -} - - -static void cma_exit(void) { - __INFO("Releasing Contigous Memory Allocator module\n"); - - /* TODO: walk_list_remove_pid */ - - device_destroy(class, MKDEV(major, 0)); - - class_destroy(class); - - unregister_chrdev(major, DRIVER_NODE_NAME); -} - - -MODULE_LICENSE("GPL"); -MODULE_DESCRIPTION("Driver for allocating cached and noncached physically contigous memory. " - "Exploits kernel CMA feature."); -module_init(cma_init); -module_exit(cma_exit); diff --git a/3rdparty/compiler-rt/builtin_fp16.h b/3rdparty/compiler-rt/builtin_fp16.h index 67fe643..fa8efdd 100644 --- a/3rdparty/compiler-rt/builtin_fp16.h +++ b/3rdparty/compiler-rt/builtin_fp16.h @@ -18,8 +18,6 @@ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. - - * Copyright (c) 2018 by Contributors * \file builtin_fp16.cc * \brief Functions for conversion between fp32 and fp16, adopted from compiler-rt. */ diff --git a/NOTICE b/NOTICE index 64d6ee0..ca4b80a 100644 --- a/NOTICE +++ b/NOTICE @@ -1,6 +1,5 @@ Apache TVM (incubating) -Copyright 2019 and onwards The Apache Software Foundation +Copyright 2019 The Apache Software Foundation This product includes software developed at The Apache Software Foundation (http://www.apache.org/). -
