Commit 28fc2bd2 authored by Arnd Bergmann's avatar Arnd Bergmann Committed by Martin K. Petersen

scsi: cxlflash: Fix function pointer cast warnings

Calling a function through an incompatible pointer type causes breaks kcfi,
so clang warns about the assignments:

drivers/scsi/cxlflash/main.c:3498:3: error: cast from 'int (*)(struct cxlflash_cfg *, struct ht_cxlflash_lun_provision *)' to 'hioctl' (aka 'int (*)(struct cxlflash_cfg *, void *)') converts to incompatible function type [-Werror,-Wcast-function-type-strict]
 3498 |                 (hioctl)cxlflash_lun_provision },
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/scsi/cxlflash/main.c:3500:3: error: cast from 'int (*)(struct cxlflash_cfg *, struct ht_cxlflash_afu_debug *)' to 'hioctl' (aka 'int (*)(struct cxlflash_cfg *, void *)') converts to incompatible function type [-Werror,-Wcast-function-type-strict]
 3500 |                 (hioctl)cxlflash_afu_debug },
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~

Address these by changing the functions to have the correct type and
replace the function pointer cast with a cast of its argument.

Link: https://lore.kernel.org/lkml/20240326145140.3257163-6-arnd@kernel.org/Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
Link: https://lore.kernel.org/r/20240404161524.3473857-1-arnd@kernel.orgSigned-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 33507b39
...@@ -216,7 +216,7 @@ void cxlflash_term_global_luns(void) ...@@ -216,7 +216,7 @@ void cxlflash_term_global_luns(void)
/** /**
* cxlflash_manage_lun() - handles LUN management activities * cxlflash_manage_lun() - handles LUN management activities
* @sdev: SCSI device associated with LUN. * @sdev: SCSI device associated with LUN.
* @manage: Manage ioctl data structure. * @arg: Manage ioctl data structure.
* *
* This routine is used to notify the driver about a LUN's WWID and associate * This routine is used to notify the driver about a LUN's WWID and associate
* SCSI devices (sdev) with a global LUN instance. Additionally it serves to * SCSI devices (sdev) with a global LUN instance. Additionally it serves to
...@@ -224,9 +224,9 @@ void cxlflash_term_global_luns(void) ...@@ -224,9 +224,9 @@ void cxlflash_term_global_luns(void)
* *
* Return: 0 on success, -errno on failure * Return: 0 on success, -errno on failure
*/ */
int cxlflash_manage_lun(struct scsi_device *sdev, int cxlflash_manage_lun(struct scsi_device *sdev, void *arg)
struct dk_cxlflash_manage_lun *manage)
{ {
struct dk_cxlflash_manage_lun *manage = arg;
struct cxlflash_cfg *cfg = shost_priv(sdev->host); struct cxlflash_cfg *cfg = shost_priv(sdev->host);
struct device *dev = &cfg->dev->dev; struct device *dev = &cfg->dev->dev;
struct llun_info *lli = NULL; struct llun_info *lli = NULL;
......
...@@ -3280,13 +3280,13 @@ static char *decode_hioctl(unsigned int cmd) ...@@ -3280,13 +3280,13 @@ static char *decode_hioctl(unsigned int cmd)
/** /**
* cxlflash_lun_provision() - host LUN provisioning handler * cxlflash_lun_provision() - host LUN provisioning handler
* @cfg: Internal structure associated with the host. * @cfg: Internal structure associated with the host.
* @lunprov: Kernel copy of userspace ioctl data structure. * @arg: Kernel copy of userspace ioctl data structure.
* *
* Return: 0 on success, -errno on failure * Return: 0 on success, -errno on failure
*/ */
static int cxlflash_lun_provision(struct cxlflash_cfg *cfg, static int cxlflash_lun_provision(struct cxlflash_cfg *cfg, void *arg)
struct ht_cxlflash_lun_provision *lunprov)
{ {
struct ht_cxlflash_lun_provision *lunprov = arg;
struct afu *afu = cfg->afu; struct afu *afu = cfg->afu;
struct device *dev = &cfg->dev->dev; struct device *dev = &cfg->dev->dev;
struct sisl_ioarcb rcb; struct sisl_ioarcb rcb;
...@@ -3371,16 +3371,16 @@ static int cxlflash_lun_provision(struct cxlflash_cfg *cfg, ...@@ -3371,16 +3371,16 @@ static int cxlflash_lun_provision(struct cxlflash_cfg *cfg,
/** /**
* cxlflash_afu_debug() - host AFU debug handler * cxlflash_afu_debug() - host AFU debug handler
* @cfg: Internal structure associated with the host. * @cfg: Internal structure associated with the host.
* @afu_dbg: Kernel copy of userspace ioctl data structure. * @arg: Kernel copy of userspace ioctl data structure.
* *
* For debug requests requiring a data buffer, always provide an aligned * For debug requests requiring a data buffer, always provide an aligned
* (cache line) buffer to the AFU to appease any alignment requirements. * (cache line) buffer to the AFU to appease any alignment requirements.
* *
* Return: 0 on success, -errno on failure * Return: 0 on success, -errno on failure
*/ */
static int cxlflash_afu_debug(struct cxlflash_cfg *cfg, static int cxlflash_afu_debug(struct cxlflash_cfg *cfg, void *arg)
struct ht_cxlflash_afu_debug *afu_dbg)
{ {
struct ht_cxlflash_afu_debug *afu_dbg = arg;
struct afu *afu = cfg->afu; struct afu *afu = cfg->afu;
struct device *dev = &cfg->dev->dev; struct device *dev = &cfg->dev->dev;
struct sisl_ioarcb rcb; struct sisl_ioarcb rcb;
...@@ -3494,10 +3494,8 @@ static long cxlflash_chr_ioctl(struct file *file, unsigned int cmd, ...@@ -3494,10 +3494,8 @@ static long cxlflash_chr_ioctl(struct file *file, unsigned int cmd,
size_t size; size_t size;
hioctl ioctl; hioctl ioctl;
} ioctl_tbl[] = { /* NOTE: order matters here */ } ioctl_tbl[] = { /* NOTE: order matters here */
{ sizeof(struct ht_cxlflash_lun_provision), { sizeof(struct ht_cxlflash_lun_provision), cxlflash_lun_provision },
(hioctl)cxlflash_lun_provision }, { sizeof(struct ht_cxlflash_afu_debug), cxlflash_afu_debug },
{ sizeof(struct ht_cxlflash_afu_debug),
(hioctl)cxlflash_afu_debug },
}; };
/* Hold read semaphore so we can drain if needed */ /* Hold read semaphore so we can drain if needed */
......
...@@ -729,8 +729,7 @@ int _cxlflash_disk_release(struct scsi_device *sdev, ...@@ -729,8 +729,7 @@ int _cxlflash_disk_release(struct scsi_device *sdev,
return rc; return rc;
} }
int cxlflash_disk_release(struct scsi_device *sdev, int cxlflash_disk_release(struct scsi_device *sdev, void *release)
struct dk_cxlflash_release *release)
{ {
return _cxlflash_disk_release(sdev, NULL, release); return _cxlflash_disk_release(sdev, NULL, release);
} }
...@@ -955,8 +954,7 @@ static int _cxlflash_disk_detach(struct scsi_device *sdev, ...@@ -955,8 +954,7 @@ static int _cxlflash_disk_detach(struct scsi_device *sdev,
return rc; return rc;
} }
static int cxlflash_disk_detach(struct scsi_device *sdev, static int cxlflash_disk_detach(struct scsi_device *sdev, void *detach)
struct dk_cxlflash_detach *detach)
{ {
return _cxlflash_disk_detach(sdev, NULL, detach); return _cxlflash_disk_detach(sdev, NULL, detach);
} }
...@@ -1305,7 +1303,7 @@ int check_state(struct cxlflash_cfg *cfg) ...@@ -1305,7 +1303,7 @@ int check_state(struct cxlflash_cfg *cfg)
/** /**
* cxlflash_disk_attach() - attach a LUN to a context * cxlflash_disk_attach() - attach a LUN to a context
* @sdev: SCSI device associated with LUN. * @sdev: SCSI device associated with LUN.
* @attach: Attach ioctl data structure. * @arg: Attach ioctl data structure.
* *
* Creates a context and attaches LUN to it. A LUN can only be attached * Creates a context and attaches LUN to it. A LUN can only be attached
* one time to a context (subsequent attaches for the same context/LUN pair * one time to a context (subsequent attaches for the same context/LUN pair
...@@ -1314,9 +1312,9 @@ int check_state(struct cxlflash_cfg *cfg) ...@@ -1314,9 +1312,9 @@ int check_state(struct cxlflash_cfg *cfg)
* *
* Return: 0 on success, -errno on failure * Return: 0 on success, -errno on failure
*/ */
static int cxlflash_disk_attach(struct scsi_device *sdev, static int cxlflash_disk_attach(struct scsi_device *sdev, void *arg)
struct dk_cxlflash_attach *attach)
{ {
struct dk_cxlflash_attach *attach = arg;
struct cxlflash_cfg *cfg = shost_priv(sdev->host); struct cxlflash_cfg *cfg = shost_priv(sdev->host);
struct device *dev = &cfg->dev->dev; struct device *dev = &cfg->dev->dev;
struct afu *afu = cfg->afu; struct afu *afu = cfg->afu;
...@@ -1621,7 +1619,7 @@ static int recover_context(struct cxlflash_cfg *cfg, ...@@ -1621,7 +1619,7 @@ static int recover_context(struct cxlflash_cfg *cfg,
/** /**
* cxlflash_afu_recover() - initiates AFU recovery * cxlflash_afu_recover() - initiates AFU recovery
* @sdev: SCSI device associated with LUN. * @sdev: SCSI device associated with LUN.
* @recover: Recover ioctl data structure. * @arg: Recover ioctl data structure.
* *
* Only a single recovery is allowed at a time to avoid exhausting CXL * Only a single recovery is allowed at a time to avoid exhausting CXL
* resources (leading to recovery failure) in the event that we're up * resources (leading to recovery failure) in the event that we're up
...@@ -1648,9 +1646,9 @@ static int recover_context(struct cxlflash_cfg *cfg, ...@@ -1648,9 +1646,9 @@ static int recover_context(struct cxlflash_cfg *cfg,
* *
* Return: 0 on success, -errno on failure * Return: 0 on success, -errno on failure
*/ */
static int cxlflash_afu_recover(struct scsi_device *sdev, static int cxlflash_afu_recover(struct scsi_device *sdev, void *arg)
struct dk_cxlflash_recover_afu *recover)
{ {
struct dk_cxlflash_recover_afu *recover = arg;
struct cxlflash_cfg *cfg = shost_priv(sdev->host); struct cxlflash_cfg *cfg = shost_priv(sdev->host);
struct device *dev = &cfg->dev->dev; struct device *dev = &cfg->dev->dev;
struct llun_info *lli = sdev->hostdata; struct llun_info *lli = sdev->hostdata;
...@@ -1829,13 +1827,13 @@ static int process_sense(struct scsi_device *sdev, ...@@ -1829,13 +1827,13 @@ static int process_sense(struct scsi_device *sdev,
/** /**
* cxlflash_disk_verify() - verifies a LUN is the same and handle size changes * cxlflash_disk_verify() - verifies a LUN is the same and handle size changes
* @sdev: SCSI device associated with LUN. * @sdev: SCSI device associated with LUN.
* @verify: Verify ioctl data structure. * @arg: Verify ioctl data structure.
* *
* Return: 0 on success, -errno on failure * Return: 0 on success, -errno on failure
*/ */
static int cxlflash_disk_verify(struct scsi_device *sdev, static int cxlflash_disk_verify(struct scsi_device *sdev, void *arg)
struct dk_cxlflash_verify *verify)
{ {
struct dk_cxlflash_verify *verify = arg;
int rc = 0; int rc = 0;
struct ctx_info *ctxi = NULL; struct ctx_info *ctxi = NULL;
struct cxlflash_cfg *cfg = shost_priv(sdev->host); struct cxlflash_cfg *cfg = shost_priv(sdev->host);
...@@ -2111,16 +2109,16 @@ int cxlflash_ioctl(struct scsi_device *sdev, unsigned int cmd, void __user *arg) ...@@ -2111,16 +2109,16 @@ int cxlflash_ioctl(struct scsi_device *sdev, unsigned int cmd, void __user *arg)
size_t size; size_t size;
sioctl ioctl; sioctl ioctl;
} ioctl_tbl[] = { /* NOTE: order matters here */ } ioctl_tbl[] = { /* NOTE: order matters here */
{sizeof(struct dk_cxlflash_attach), (sioctl)cxlflash_disk_attach}, {sizeof(struct dk_cxlflash_attach), cxlflash_disk_attach},
{sizeof(struct dk_cxlflash_udirect), cxlflash_disk_direct_open}, {sizeof(struct dk_cxlflash_udirect), cxlflash_disk_direct_open},
{sizeof(struct dk_cxlflash_release), (sioctl)cxlflash_disk_release}, {sizeof(struct dk_cxlflash_release), cxlflash_disk_release},
{sizeof(struct dk_cxlflash_detach), (sioctl)cxlflash_disk_detach}, {sizeof(struct dk_cxlflash_detach), cxlflash_disk_detach},
{sizeof(struct dk_cxlflash_verify), (sioctl)cxlflash_disk_verify}, {sizeof(struct dk_cxlflash_verify), cxlflash_disk_verify},
{sizeof(struct dk_cxlflash_recover_afu), (sioctl)cxlflash_afu_recover}, {sizeof(struct dk_cxlflash_recover_afu), cxlflash_afu_recover},
{sizeof(struct dk_cxlflash_manage_lun), (sioctl)cxlflash_manage_lun}, {sizeof(struct dk_cxlflash_manage_lun), cxlflash_manage_lun},
{sizeof(struct dk_cxlflash_uvirtual), cxlflash_disk_virtual_open}, {sizeof(struct dk_cxlflash_uvirtual), cxlflash_disk_virtual_open},
{sizeof(struct dk_cxlflash_resize), (sioctl)cxlflash_vlun_resize}, {sizeof(struct dk_cxlflash_resize), cxlflash_vlun_resize},
{sizeof(struct dk_cxlflash_clone), (sioctl)cxlflash_disk_clone}, {sizeof(struct dk_cxlflash_clone), cxlflash_disk_clone},
}; };
/* Hold read semaphore so we can drain if needed */ /* Hold read semaphore so we can drain if needed */
......
...@@ -114,18 +114,16 @@ struct cxlflash_global { ...@@ -114,18 +114,16 @@ struct cxlflash_global {
struct page *err_page; /* One page of all 0xF for error notification */ struct page *err_page; /* One page of all 0xF for error notification */
}; };
int cxlflash_vlun_resize(struct scsi_device *sdev, int cxlflash_vlun_resize(struct scsi_device *sdev, void *resize);
struct dk_cxlflash_resize *resize);
int _cxlflash_vlun_resize(struct scsi_device *sdev, struct ctx_info *ctxi, int _cxlflash_vlun_resize(struct scsi_device *sdev, struct ctx_info *ctxi,
struct dk_cxlflash_resize *resize); struct dk_cxlflash_resize *resize);
int cxlflash_disk_release(struct scsi_device *sdev, int cxlflash_disk_release(struct scsi_device *sdev,
struct dk_cxlflash_release *release); void *release);
int _cxlflash_disk_release(struct scsi_device *sdev, struct ctx_info *ctxi, int _cxlflash_disk_release(struct scsi_device *sdev, struct ctx_info *ctxi,
struct dk_cxlflash_release *release); struct dk_cxlflash_release *release);
int cxlflash_disk_clone(struct scsi_device *sdev, int cxlflash_disk_clone(struct scsi_device *sdev, void *arg);
struct dk_cxlflash_clone *clone);
int cxlflash_disk_virtual_open(struct scsi_device *sdev, void *arg); int cxlflash_disk_virtual_open(struct scsi_device *sdev, void *arg);
...@@ -145,8 +143,7 @@ void rhte_checkin(struct ctx_info *ctxi, struct sisl_rht_entry *rhte); ...@@ -145,8 +143,7 @@ void rhte_checkin(struct ctx_info *ctxi, struct sisl_rht_entry *rhte);
void cxlflash_ba_terminate(struct ba_lun *ba_lun); void cxlflash_ba_terminate(struct ba_lun *ba_lun);
int cxlflash_manage_lun(struct scsi_device *sdev, int cxlflash_manage_lun(struct scsi_device *sdev, void *manage);
struct dk_cxlflash_manage_lun *manage);
int check_state(struct cxlflash_cfg *cfg); int check_state(struct cxlflash_cfg *cfg);
......
...@@ -819,8 +819,7 @@ int _cxlflash_vlun_resize(struct scsi_device *sdev, ...@@ -819,8 +819,7 @@ int _cxlflash_vlun_resize(struct scsi_device *sdev,
return rc; return rc;
} }
int cxlflash_vlun_resize(struct scsi_device *sdev, int cxlflash_vlun_resize(struct scsi_device *sdev, void *resize)
struct dk_cxlflash_resize *resize)
{ {
return _cxlflash_vlun_resize(sdev, NULL, resize); return _cxlflash_vlun_resize(sdev, NULL, resize);
} }
...@@ -1178,7 +1177,7 @@ static int clone_lxt(struct afu *afu, ...@@ -1178,7 +1177,7 @@ static int clone_lxt(struct afu *afu,
/** /**
* cxlflash_disk_clone() - clone a context by making snapshot of another * cxlflash_disk_clone() - clone a context by making snapshot of another
* @sdev: SCSI device associated with LUN owning virtual LUN. * @sdev: SCSI device associated with LUN owning virtual LUN.
* @clone: Clone ioctl data structure. * @arg: Clone ioctl data structure.
* *
* This routine effectively performs cxlflash_disk_open operation for each * This routine effectively performs cxlflash_disk_open operation for each
* in-use virtual resource in the source context. Note that the destination * in-use virtual resource in the source context. Note that the destination
...@@ -1187,9 +1186,9 @@ static int clone_lxt(struct afu *afu, ...@@ -1187,9 +1186,9 @@ static int clone_lxt(struct afu *afu,
* *
* Return: 0 on success, -errno on failure * Return: 0 on success, -errno on failure
*/ */
int cxlflash_disk_clone(struct scsi_device *sdev, int cxlflash_disk_clone(struct scsi_device *sdev, void *arg)
struct dk_cxlflash_clone *clone)
{ {
struct dk_cxlflash_clone *clone = arg;
struct cxlflash_cfg *cfg = shost_priv(sdev->host); struct cxlflash_cfg *cfg = shost_priv(sdev->host);
struct device *dev = &cfg->dev->dev; struct device *dev = &cfg->dev->dev;
struct llun_info *lli = sdev->hostdata; struct llun_info *lli = sdev->hostdata;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment