Skip to content

Commit 62ccf2d

Browse files
Ian Munsiempe
authored andcommitted
cxl: Move cxl_afu_get / cxl_afu_put to base
The Mellanox CX4 uses a model where the AFU is one physical function of the device, and is used by other peer physical functions of the same device. This will require those other devices to grab a reference on the AFU when they are initialised to make sure that it does not go away during their lifetime. Move the AFU refcount functions to base.c so they can be called from the PHB code. Signed-off-by: Ian Munsie <imunsie@au1.ibm.com> Reviewed-by: Andrew Donnellan <andrew.donnellan@au1.ibm.com> Reviewed-by: Frederic Barrat <fbarrat@linux.vnet.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
1 parent 48b3adf commit 62ccf2d

3 files changed

Lines changed: 17 additions & 12 deletions

File tree

drivers/misc/cxl/base.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,19 @@ static inline void cxl_calls_put(struct cxl_calls *calls) { }
5454

5555
#endif /* CONFIG_CXL_MODULE */
5656

57+
/* AFU refcount management */
58+
struct cxl_afu *cxl_afu_get(struct cxl_afu *afu)
59+
{
60+
return (get_device(&afu->dev) == NULL) ? NULL : afu;
61+
}
62+
EXPORT_SYMBOL_GPL(cxl_afu_get);
63+
64+
void cxl_afu_put(struct cxl_afu *afu)
65+
{
66+
put_device(&afu->dev);
67+
}
68+
EXPORT_SYMBOL_GPL(cxl_afu_put);
69+
5770
void cxl_slbia(struct mm_struct *mm)
5871
{
5972
struct cxl_calls *calls;

drivers/misc/cxl/cxl.h

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -440,18 +440,6 @@ struct cxl_afu {
440440
bool enabled;
441441
};
442442

443-
/* AFU refcount management */
444-
static inline struct cxl_afu *cxl_afu_get(struct cxl_afu *afu)
445-
{
446-
447-
return (get_device(&afu->dev) == NULL) ? NULL : afu;
448-
}
449-
450-
static inline void cxl_afu_put(struct cxl_afu *afu)
451-
{
452-
put_device(&afu->dev);
453-
}
454-
455443

456444
struct cxl_irq_name {
457445
struct list_head list;

include/misc/cxl-base.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,15 @@ static inline void cxl_ctx_put(void)
3636
atomic_dec(&cxl_use_count);
3737
}
3838

39+
struct cxl_afu *cxl_afu_get(struct cxl_afu *afu);
40+
void cxl_afu_put(struct cxl_afu *afu);
3941
void cxl_slbia(struct mm_struct *mm);
4042

4143
#else /* CONFIG_CXL_BASE */
4244

4345
static inline bool cxl_ctx_in_use(void) { return false; }
46+
static inline struct cxl_afu *cxl_afu_get(struct cxl_afu *afu) { return NULL; }
47+
static inline void cxl_afu_put(struct cxl_afu *afu) {}
4448
static inline void cxl_slbia(struct mm_struct *mm) {}
4549

4650
#endif /* CONFIG_CXL_BASE */

0 commit comments

Comments
 (0)