diff options
author | Ian Munsie <imunsie@au1.ibm.com> | 2014-10-08 19:54:56 +1100 |
---|---|---|
committer | Michael Ellerman <mpe@ellerman.id.au> | 2014-10-08 20:15:43 +1100 |
commit | 1cd258d7faccb330145f08d838608b2c6ad41604 (patch) | |
tree | 948457caea1958ae0a6ffee7bed786b1a04428c6 /include/misc | |
parent | fd9a1c26ae7d70a2dc1eafad7b9bf076ad8b67d9 (diff) | |
download | op-kernel-dev-1cd258d7faccb330145f08d838608b2c6ad41604.zip op-kernel-dev-1cd258d7faccb330145f08d838608b2c6ad41604.tar.gz |
cxl: Add new header for call backs and structs
This new header adds callbacks and structs needed by the rest of the kernel to
hook into the cxl infrastructure.
This adds the cxl_ctx_in_use() function for use in the mm code to see if any
cxl contexts are currently in use. This is used by the tlbie() to determine if
it can do local TLB invalidations or not. This also adds get/put calls for the
cxl driver module to refcount the active cxl contexts.
cxl_ctx_get/put/in_use are static inlined here as they are called in tlbie
which we want to be fast (mpe's suggestion).
Empty functions are provided when CONFIG_CXL_BASE is not enabled.
Signed-off-by: Ian Munsie <imunsie@au1.ibm.com>
Signed-off-by: Michael Neuling <mikey@neuling.org>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Diffstat (limited to 'include/misc')
-rw-r--r-- | include/misc/cxl.h | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/include/misc/cxl.h b/include/misc/cxl.h new file mode 100644 index 0000000..975cc78 --- /dev/null +++ b/include/misc/cxl.h @@ -0,0 +1,48 @@ +/* + * Copyright 2014 IBM Corp. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version + * 2 of the License, or (at your option) any later version. + */ + +#ifndef _MISC_CXL_H +#define _MISC_CXL_H + +#ifdef CONFIG_CXL_BASE + +#define CXL_IRQ_RANGES 4 + +struct cxl_irq_ranges { + irq_hw_number_t offset[CXL_IRQ_RANGES]; + irq_hw_number_t range[CXL_IRQ_RANGES]; +}; + +extern atomic_t cxl_use_count; + +static inline bool cxl_ctx_in_use(void) +{ + return (atomic_read(&cxl_use_count) != 0); +} + +static inline void cxl_ctx_get(void) +{ + atomic_inc(&cxl_use_count); +} + +static inline void cxl_ctx_put(void) +{ + atomic_dec(&cxl_use_count); +} + +void cxl_slbia(struct mm_struct *mm); + +#else /* CONFIG_CXL_BASE */ + +static inline bool cxl_ctx_in_use(void) { return false; } +static inline void cxl_slbia(struct mm_struct *mm) {} + +#endif /* CONFIG_CXL_BASE */ + +#endif |