cxl: Isolate a few bare-metal-specific calls
A few functions are mostly common between bare-metal and guest and just need minor tuning. To avoid crowding the backend API, introduce a few 'if' based on the CPU being in HV mode. Co-authored-by: Christophe Lombard <clombard@linux.vnet.ibm.com> Signed-off-by: Frederic Barrat <fbarrat@linux.vnet.ibm.com> Signed-off-by: Christophe Lombard <clombard@linux.vnet.ibm.com> Reviewed-by: Manoj Kumar <manoj@linux.vnet.ibm.com> Acked-by: Ian Munsie <imunsie@au1.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
parent
2b04cf310b
commit
ea2d1f95ef
|
@ -95,7 +95,8 @@ int cxl_context_init(struct cxl_context *ctx, struct cxl_afu *afu, bool master,
|
|||
return i;
|
||||
|
||||
ctx->pe = i;
|
||||
ctx->elem = &ctx->afu->spa[i];
|
||||
if (cpu_has_feature(CPU_FTR_HVMODE))
|
||||
ctx->elem = &ctx->afu->spa[i];
|
||||
ctx->pe_inserted = false;
|
||||
|
||||
/*
|
||||
|
|
|
@ -560,8 +560,11 @@ static inline bool cxl_adapter_link_ok(struct cxl *cxl)
|
|||
{
|
||||
struct pci_dev *pdev;
|
||||
|
||||
pdev = to_pci_dev(cxl->dev.parent);
|
||||
return !pci_channel_offline(pdev);
|
||||
if (cpu_has_feature(CPU_FTR_HVMODE)) {
|
||||
pdev = to_pci_dev(cxl->dev.parent);
|
||||
return !pci_channel_offline(pdev);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static inline void __iomem *_cxl_p1_addr(struct cxl *cxl, cxl_p1_reg_t reg)
|
||||
|
|
|
@ -118,6 +118,10 @@ void cxl_debugfs_afu_remove(struct cxl_afu *afu)
|
|||
int __init cxl_debugfs_init(void)
|
||||
{
|
||||
struct dentry *ent;
|
||||
|
||||
if (!cpu_has_feature(CPU_FTR_HVMODE))
|
||||
return 0;
|
||||
|
||||
ent = debugfs_create_dir("cxl", NULL);
|
||||
if (IS_ERR(ent))
|
||||
return PTR_ERR(ent);
|
||||
|
|
|
@ -254,14 +254,17 @@ void cxl_handle_fault(struct work_struct *fault_work)
|
|||
u64 dar = ctx->dar;
|
||||
struct mm_struct *mm = NULL;
|
||||
|
||||
if (cxl_p2n_read(ctx->afu, CXL_PSL_DSISR_An) != dsisr ||
|
||||
cxl_p2n_read(ctx->afu, CXL_PSL_DAR_An) != dar ||
|
||||
cxl_p2n_read(ctx->afu, CXL_PSL_PEHandle_An) != ctx->pe) {
|
||||
/* Most likely explanation is harmless - a dedicated process
|
||||
* has detached and these were cleared by the PSL purge, but
|
||||
* warn about it just in case */
|
||||
dev_notice(&ctx->afu->dev, "cxl_handle_fault: Translation fault regs changed\n");
|
||||
return;
|
||||
if (cpu_has_feature(CPU_FTR_HVMODE)) {
|
||||
if (cxl_p2n_read(ctx->afu, CXL_PSL_DSISR_An) != dsisr ||
|
||||
cxl_p2n_read(ctx->afu, CXL_PSL_DAR_An) != dar ||
|
||||
cxl_p2n_read(ctx->afu, CXL_PSL_PEHandle_An) != ctx->pe) {
|
||||
/* Most likely explanation is harmless - a dedicated
|
||||
* process has detached and these were cleared by the
|
||||
* PSL purge, but warn about it just in case
|
||||
*/
|
||||
dev_notice(&ctx->afu->dev, "cxl_handle_fault: Translation fault regs changed\n");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/* Early return if the context is being / has been detached */
|
||||
|
|
Loading…
Reference in New Issue