Updated kcalloc/kmalloc calls and enabled sdma_select_user_engine dependencies

Conflicts:
	kernel/include/hfi1/ihk_hfi1_common.h
This commit is contained in:
Aram Santogidis
2017-08-03 18:23:29 +09:00
committed by Balazs Gerofi
parent b60a980088
commit fe4c461f2f
5 changed files with 33 additions and 16 deletions

View File

@@ -1251,12 +1251,17 @@ struct hfi1_devdata {
}; };
#endif /* __HFI1_ORIG__ */ #endif /* __HFI1_ORIG__ */
//TODO: double check the order
#ifndef __HFI1_ORIG__ #ifndef __HFI1_ORIG__
struct hfi1_devdata { struct hfi1_devdata {
struct list_head list; struct list_head list;
/* pointers to related structs for this device */ /* pointers to related structs for this device */
/* pci access data structure */ /* pci access data structure */
struct pci_dev *pcidev; struct pci_dev *pcidev;
/* lock for sdma_map */
spinlock_t sde_map_lock;
/* array of vl maps */
struct sdma_vl_map __rcu *sdma_map;
dma_addr_t sdma_pad_phys; dma_addr_t sdma_pad_phys;
/* array of engines sized by num_sdma */ /* array of engines sized by num_sdma */
struct sdma_engine *per_sdma; struct sdma_engine *per_sdma;

View File

@@ -7,6 +7,7 @@
#include <lwk/compiler.h> #include <lwk/compiler.h>
#include <arch-lock.h> #include <arch-lock.h>
#include <page.h> #include <page.h>
#include <string.h>
#ifndef ARRAY_SIZE #ifndef ARRAY_SIZE
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
@@ -65,22 +66,20 @@
#define atomic_read ihk_atomic_read #define atomic_read ihk_atomic_read
#define atomic_add ihk_atomic_add #define atomic_add ihk_atomic_add
#define atomic_t ihk_atomic_t #define atomic_t ihk_atomic_t
typedef ihk_spinlock_t spinlock_t;
/* TODO***********************************/ /* TODO***********************************/
#define spin_lock_irqsave(lock, flags) do {} while(0) #define spin_lock_irqsave(lock, flags) do {} while(0)
#define spin_unlock_irqsave(lock, flags) do {} while(0) #define spin_unlock_irqsave(lock, flags) do {} while(0)
#define spin_unlock_irqrestore(lock, flags) do {} while(0) #define spin_unlock_irqrestore(lock, flags) do {} while(0)
typedef ihk_spinlock_t spinlock_t; #define ____cacheline_aligned_in_smp __attribute__((aligned(64)))
#define ____cacheline_aligned_in_smp
#define __iomem #define __iomem
#define spin_lock(...) do {} while(0) #define spin_lock(...) do {} while(0)
#define spin_unlock(...) do {} while(0) #define spin_unlock(...) do {} while(0)
#define smp_wmb() barrier() #define smp_wmb() barrier()
#define smp_rmb() barrier() #define smp_rmb() barrier()
/***********************************************/ /***********************************************/
# define __rcu
/* TODO: Figure the corresponding flag for McKernel-kmalloc()*/
#define __GFP_ZERO 0
#define GFP_KERNEL 0 #define GFP_KERNEL 0
/* kernel-xppsl_1.5.2/include/linux/seqlock.h */ /* kernel-xppsl_1.5.2/include/linux/seqlock.h */
@@ -113,6 +112,7 @@ static inline unsigned raw_seqcount_begin(const seqcount_t *s)
#define MAX_TID_PAIR_ENTRIES 1024 /* max receive expected pairs */ #define MAX_TID_PAIR_ENTRIES 1024 /* max receive expected pairs */
#define PIO_BLOCK_SIZE 64 /* bytes */ #define PIO_BLOCK_SIZE 64 /* bytes */
/* From: chip.c/h */ /* From: chip.c/h */
#define TXE_NUM_SDMA_ENGINES 16
//num_vls = HFI1_MAX_VLS_SUPPORTED; //num_vls = HFI1_MAX_VLS_SUPPORTED;
//num_vls = dd->chip_sdma_engines; //num_vls = dd->chip_sdma_engines;
#define HFI1_MAX_VLS_SUPPORTED 8 #define HFI1_MAX_VLS_SUPPORTED 8
@@ -207,12 +207,15 @@ static inline void *kmalloc_array(size_t n, size_t size, gfp_t flags)
{ {
if (size != 0 && n > SIZE_MAX / size) if (size != 0 && n > SIZE_MAX / size)
return NULL; return NULL;
return __kmalloc(n * size, flags); return kmalloc(n * size, flags);
} }
static inline void *kcalloc(size_t n, size_t size, gfp_t flags) static inline void *kcalloc(size_t n, size_t size, gfp_t flags)
{ {
return kmalloc(n * size, flags | __GFP_ZERO); void *mem = kmalloc(n * size, flags);
if (mem)
memset(mem, 0, n * size);
return mem;
} }
#endif #endif

View File

@@ -882,7 +882,7 @@ static inline int sdma_txadd_kvaddr(
return -ENOSPC; return -ENOSPC;
} }
#else #else
//TODO: dma_map_single addr = virt_to_phys(kvaddr);
#endif /* __HFI1_ORIG__ */ #endif /* __HFI1_ORIG__ */
return _sdma_txadd_daddr( return _sdma_txadd_daddr(
@@ -1038,6 +1038,7 @@ void sdma_engine_interrupt(struct sdma_engine *sde, u64 status);
* *
*/ */
#endif /* __HFI1_ORIG__ */
/** /**
* struct sdma_map_elem - mapping for a vl * struct sdma_map_elem - mapping for a vl
* @mask - selector mask * @mask - selector mask
@@ -1067,12 +1068,17 @@ struct sdma_map_elem {
*/ */
struct sdma_vl_map { struct sdma_vl_map {
s8 engine_to_vl[TXE_NUM_SDMA_ENGINES]; s8 engine_to_vl[TXE_NUM_SDMA_ENGINES];
#ifdef __HFI1_ORIG__
struct rcu_head list; struct rcu_head list;
#else
//TODO: struct rcu_head list;
#endif /* __HFI1_ORIG__ */
u32 mask; u32 mask;
u8 actual_vls; u8 actual_vls;
u8 vls; u8 vls;
struct sdma_map_elem *map[0]; struct sdma_map_elem *map[0];
}; };
#ifdef __HFI1_ORIG__
int sdma_map_init( int sdma_map_init(
struct hfi1_devdata *dd, struct hfi1_devdata *dd,

View File

@@ -770,6 +770,7 @@ int sdma_engine_get_vl(struct sdma_engine *sde)
return vl; return vl;
} }
#endif /* __HFI1_ORIG__ */
/** /**
* sdma_select_engine_vl() - select sdma engine * sdma_select_engine_vl() - select sdma engine
* @dd: devdata * @dd: devdata
@@ -808,25 +809,26 @@ struct sdma_engine *sdma_select_engine_vl(
m = rcu_dereference(dd->sdma_map); m = rcu_dereference(dd->sdma_map);
#else #else
m = (volatile struct sdma_vl_map *)dd->sdma_map; m = (volatile struct sdma_vl_map *)dd->sdma_map;
#endif #endif /* __HFI1_ORIG__ */
if (unlikely(!m)) { if (unlikely(!m)) {
#ifdef __HFI1_ORIG__ #ifdef __HFI1_ORIG__
rcu_read_unlock(); rcu_read_unlock();
#endif #endif /* __HFI1_ORIG__ */
return &dd->per_sdma[0]; return &dd->per_sdma[0];
} }
e = m->map[vl & m->mask]; e = m->map[vl & m->mask];
rval = e->sde[selector & e->mask]; rval = e->sde[selector & e->mask];
#ifdef __HFI1_ORIG__ #ifdef __HFI1_ORIG__
rcu_read_unlock(); rcu_read_unlock();
#endif #endif /* __HFI1_ORIG__ */
done: done:
rval = !rval ? &dd->per_sdma[0] : rval; rval = !rval ? &dd->per_sdma[0] : rval;
trace_hfi1_sdma_engine_select(dd, selector, vl, rval->this_idx); // trace_hfi1_sdma_engine_select(dd, selector, vl, rval->this_idx);
hfi1_cdbg(AIOWRITE, "-"); hfi1_cdbg(AIOWRITE, "-");
return rval; return rval;
} }
#ifdef __HFI1_ORIG__
/** /**
* sdma_select_engine_sc() - select sdma engine * sdma_select_engine_sc() - select sdma engine
@@ -875,6 +877,7 @@ static struct rhashtable_params sdma_rht_params = {
.mutex_is_held = info_mutex_is_held, .mutex_is_held = info_mutex_is_held,
}; };
#endif /* __HFI1_ORIG__ */
/* /*
* sdma_select_user_engine() - select sdma engine based on user setup * sdma_select_user_engine() - select sdma engine based on user setup
* @dd: devdata * @dd: devdata
@@ -918,9 +921,10 @@ struct sdma_engine *sdma_select_user_engine(struct hfi1_devdata *dd,
return sde; return sde;
out: out:
#endif #endif /* __HFI1_ORIG__ */
return sdma_select_engine_vl(dd, selector, vl); return sdma_select_engine_vl(dd, selector, vl);
} }
#ifdef __HFI1_ORIG__
static void sdma_populate_sde_map(struct sdma_rht_map_elem *map) static void sdma_populate_sde_map(struct sdma_rht_map_elem *map)
{ {

View File

@@ -583,7 +583,7 @@ int hfi1_user_sdma_process_request(void *private_data, struct iovec *iovec,
} }
} }
dkprintf("%s: hfi1_kregbase: 0x%lx -> 0x%lx:%lu\n", kprintf("%s: hfi1_kregbase: 0x%lx -> 0x%lx:%lu\n",
__FUNCTION__, __FUNCTION__,
hfi1_kregbase, (phys - TXE_PIO_SEND), TXE_PIO_SEND); hfi1_kregbase, (phys - TXE_PIO_SEND), TXE_PIO_SEND);
} }
@@ -997,11 +997,10 @@ static int user_sdma_send_pkts(struct user_sdma_request *req, unsigned maxpkts)
set_bit(SDMA_REQ_DONE_ERROR, &req->flags); set_bit(SDMA_REQ_DONE_ERROR, &req->flags);
return -EFAULT; return -EFAULT;
} }
//TODO: kmem_cache_alloc
#ifdef __HFI1_ORIG__ #ifdef __HFI1_ORIG__
tx = kmem_cache_alloc(pq->txreq_cache, GFP_KERNEL); tx = kmem_cache_alloc(pq->txreq_cache, GFP_KERNEL);
#else #else
tx = kmalloc(sizeof(struct user_sdma_txreq), GFP_KERNEL | __GFP_ZERO); tx = kmalloc(sizeof(struct user_sdma_txreq), GFP_KERNEL);
#endif /* __HFI1_ORIG__ */ #endif /* __HFI1_ORIG__ */
if (!tx) if (!tx)
return -ENOMEM; return -ENOMEM;