s390/zfcp: remove pm support from zfcp driver
As part of removing the power management support from s390 arch, remove PM callbacks from the scsi/zfcp driver. Signed-off-by: Vineeth Vijayan <vneethv@linux.ibm.com> Reviewed-by: Steffen Maier <maier@linux.ibm.com> Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
This commit is contained in:
Родитель
8cb4c20f32
Коммит
5db44cfe2e
|
@ -193,30 +193,6 @@ static int zfcp_ccw_set_online(struct ccw_device *cdev)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* zfcp_ccw_offline_sync - shut down adapter and wait for it to finish
|
|
||||||
* @cdev: pointer to belonging ccw device
|
|
||||||
* @set: Status flags to set.
|
|
||||||
* @tag: s390dbf trace record tag
|
|
||||||
*
|
|
||||||
* This function gets called by the common i/o layer and sets an adapter
|
|
||||||
* into state offline.
|
|
||||||
*/
|
|
||||||
static int zfcp_ccw_offline_sync(struct ccw_device *cdev, int set, char *tag)
|
|
||||||
{
|
|
||||||
struct zfcp_adapter *adapter = zfcp_ccw_adapter_by_cdev(cdev);
|
|
||||||
|
|
||||||
if (!adapter)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
zfcp_erp_set_adapter_status(adapter, set);
|
|
||||||
zfcp_erp_adapter_shutdown(adapter, 0, tag);
|
|
||||||
zfcp_erp_wait(adapter);
|
|
||||||
|
|
||||||
zfcp_ccw_adapter_put(adapter);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* zfcp_ccw_set_offline - set_offline function of zfcp driver
|
* zfcp_ccw_set_offline - set_offline function of zfcp driver
|
||||||
* @cdev: pointer to belonging ccw device
|
* @cdev: pointer to belonging ccw device
|
||||||
|
@ -226,7 +202,17 @@ static int zfcp_ccw_offline_sync(struct ccw_device *cdev, int set, char *tag)
|
||||||
*/
|
*/
|
||||||
static int zfcp_ccw_set_offline(struct ccw_device *cdev)
|
static int zfcp_ccw_set_offline(struct ccw_device *cdev)
|
||||||
{
|
{
|
||||||
return zfcp_ccw_offline_sync(cdev, 0, "ccsoff1");
|
struct zfcp_adapter *adapter = zfcp_ccw_adapter_by_cdev(cdev);
|
||||||
|
|
||||||
|
if (!adapter)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
zfcp_erp_set_adapter_status(adapter, 0);
|
||||||
|
zfcp_erp_adapter_shutdown(adapter, 0, "ccsoff1");
|
||||||
|
zfcp_erp_wait(adapter);
|
||||||
|
|
||||||
|
zfcp_ccw_adapter_put(adapter);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -246,11 +232,6 @@ static int zfcp_ccw_notify(struct ccw_device *cdev, int event)
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case CIO_GONE:
|
case CIO_GONE:
|
||||||
if (atomic_read(&adapter->status) &
|
|
||||||
ZFCP_STATUS_ADAPTER_SUSPENDED) { /* notification ignore */
|
|
||||||
zfcp_dbf_hba_basic("ccnigo1", adapter);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
dev_warn(&cdev->dev, "The FCP device has been detached\n");
|
dev_warn(&cdev->dev, "The FCP device has been detached\n");
|
||||||
zfcp_erp_adapter_shutdown(adapter, 0, "ccnoti1");
|
zfcp_erp_adapter_shutdown(adapter, 0, "ccnoti1");
|
||||||
break;
|
break;
|
||||||
|
@ -260,11 +241,6 @@ static int zfcp_ccw_notify(struct ccw_device *cdev, int event)
|
||||||
zfcp_erp_adapter_shutdown(adapter, 0, "ccnoti2");
|
zfcp_erp_adapter_shutdown(adapter, 0, "ccnoti2");
|
||||||
break;
|
break;
|
||||||
case CIO_OPER:
|
case CIO_OPER:
|
||||||
if (atomic_read(&adapter->status) &
|
|
||||||
ZFCP_STATUS_ADAPTER_SUSPENDED) { /* notification ignore */
|
|
||||||
zfcp_dbf_hba_basic("ccniop1", adapter);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
dev_info(&cdev->dev, "The FCP device is operational again\n");
|
dev_info(&cdev->dev, "The FCP device is operational again\n");
|
||||||
zfcp_erp_set_adapter_status(adapter,
|
zfcp_erp_set_adapter_status(adapter,
|
||||||
ZFCP_STATUS_COMMON_RUNNING);
|
ZFCP_STATUS_COMMON_RUNNING);
|
||||||
|
@ -300,28 +276,6 @@ static void zfcp_ccw_shutdown(struct ccw_device *cdev)
|
||||||
zfcp_ccw_adapter_put(adapter);
|
zfcp_ccw_adapter_put(adapter);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int zfcp_ccw_suspend(struct ccw_device *cdev)
|
|
||||||
{
|
|
||||||
zfcp_ccw_offline_sync(cdev, ZFCP_STATUS_ADAPTER_SUSPENDED, "ccsusp1");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int zfcp_ccw_thaw(struct ccw_device *cdev)
|
|
||||||
{
|
|
||||||
/* trace records for thaw and final shutdown during suspend
|
|
||||||
can only be found in system dump until the end of suspend
|
|
||||||
but not after resume because it's based on the memory image
|
|
||||||
right after the very first suspend (freeze) callback */
|
|
||||||
zfcp_ccw_activate(cdev, 0, "ccthaw1");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int zfcp_ccw_resume(struct ccw_device *cdev)
|
|
||||||
{
|
|
||||||
zfcp_ccw_activate(cdev, ZFCP_STATUS_ADAPTER_SUSPENDED, "ccresu1");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct ccw_driver zfcp_ccw_driver = {
|
struct ccw_driver zfcp_ccw_driver = {
|
||||||
.driver = {
|
.driver = {
|
||||||
.owner = THIS_MODULE,
|
.owner = THIS_MODULE,
|
||||||
|
@ -334,7 +288,4 @@ struct ccw_driver zfcp_ccw_driver = {
|
||||||
.set_offline = zfcp_ccw_set_offline,
|
.set_offline = zfcp_ccw_set_offline,
|
||||||
.notify = zfcp_ccw_notify,
|
.notify = zfcp_ccw_notify,
|
||||||
.shutdown = zfcp_ccw_shutdown,
|
.shutdown = zfcp_ccw_shutdown,
|
||||||
.freeze = zfcp_ccw_suspend,
|
|
||||||
.thaw = zfcp_ccw_thaw,
|
|
||||||
.restore = zfcp_ccw_resume,
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -263,31 +263,6 @@ void zfcp_dbf_hba_def_err(struct zfcp_adapter *adapter, u64 req_id, u16 scount,
|
||||||
spin_unlock_irqrestore(&dbf->pay_lock, flags);
|
spin_unlock_irqrestore(&dbf->pay_lock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* zfcp_dbf_hba_basic - trace event for basic adapter events
|
|
||||||
* @tag: identifier for event
|
|
||||||
* @adapter: pointer to struct zfcp_adapter
|
|
||||||
*/
|
|
||||||
void zfcp_dbf_hba_basic(char *tag, struct zfcp_adapter *adapter)
|
|
||||||
{
|
|
||||||
struct zfcp_dbf *dbf = adapter->dbf;
|
|
||||||
struct zfcp_dbf_hba *rec = &dbf->hba_buf;
|
|
||||||
static int const level = 1;
|
|
||||||
unsigned long flags;
|
|
||||||
|
|
||||||
if (unlikely(!debug_level_enabled(dbf->hba, level)))
|
|
||||||
return;
|
|
||||||
|
|
||||||
spin_lock_irqsave(&dbf->hba_lock, flags);
|
|
||||||
memset(rec, 0, sizeof(*rec));
|
|
||||||
|
|
||||||
memcpy(rec->tag, tag, ZFCP_DBF_TAG_LEN);
|
|
||||||
rec->id = ZFCP_DBF_HBA_BASIC;
|
|
||||||
|
|
||||||
debug_event(dbf->hba, level, rec, sizeof(*rec));
|
|
||||||
spin_unlock_irqrestore(&dbf->hba_lock, flags);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void zfcp_dbf_set_common(struct zfcp_dbf_rec *rec,
|
static void zfcp_dbf_set_common(struct zfcp_dbf_rec *rec,
|
||||||
struct zfcp_adapter *adapter,
|
struct zfcp_adapter *adapter,
|
||||||
struct zfcp_port *port,
|
struct zfcp_port *port,
|
||||||
|
|
|
@ -70,7 +70,6 @@
|
||||||
#define ZFCP_STATUS_ADAPTER_SIOSL_ISSUED 0x00000004
|
#define ZFCP_STATUS_ADAPTER_SIOSL_ISSUED 0x00000004
|
||||||
#define ZFCP_STATUS_ADAPTER_XCONFIG_OK 0x00000008
|
#define ZFCP_STATUS_ADAPTER_XCONFIG_OK 0x00000008
|
||||||
#define ZFCP_STATUS_ADAPTER_HOST_CON_INIT 0x00000010
|
#define ZFCP_STATUS_ADAPTER_HOST_CON_INIT 0x00000010
|
||||||
#define ZFCP_STATUS_ADAPTER_SUSPENDED 0x00000040
|
|
||||||
#define ZFCP_STATUS_ADAPTER_ERP_PENDING 0x00000100
|
#define ZFCP_STATUS_ADAPTER_ERP_PENDING 0x00000100
|
||||||
#define ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED 0x00000200
|
#define ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED 0x00000200
|
||||||
#define ZFCP_STATUS_ADAPTER_DATA_DIV_ENABLED 0x00000400
|
#define ZFCP_STATUS_ADAPTER_DATA_DIV_ENABLED 0x00000400
|
||||||
|
|
|
@ -49,7 +49,6 @@ extern void zfcp_dbf_hba_fsf_fces(char *tag, const struct zfcp_fsf_req *req,
|
||||||
u32 fc_security_new);
|
u32 fc_security_new);
|
||||||
extern void zfcp_dbf_hba_bit_err(char *, struct zfcp_fsf_req *);
|
extern void zfcp_dbf_hba_bit_err(char *, struct zfcp_fsf_req *);
|
||||||
extern void zfcp_dbf_hba_def_err(struct zfcp_adapter *, u64, u16, void **);
|
extern void zfcp_dbf_hba_def_err(struct zfcp_adapter *, u64, u16, void **);
|
||||||
extern void zfcp_dbf_hba_basic(char *, struct zfcp_adapter *);
|
|
||||||
extern void zfcp_dbf_san_req(char *, struct zfcp_fsf_req *, u32);
|
extern void zfcp_dbf_san_req(char *, struct zfcp_fsf_req *, u32);
|
||||||
extern void zfcp_dbf_san_res(char *, struct zfcp_fsf_req *);
|
extern void zfcp_dbf_san_res(char *, struct zfcp_fsf_req *);
|
||||||
extern void zfcp_dbf_san_in_els(char *, struct zfcp_fsf_req *);
|
extern void zfcp_dbf_san_in_els(char *, struct zfcp_fsf_req *);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче