]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
s390/ap: remove power management code from ap bus and drivers
authorHarald Freudenberger <freude@linux.ibm.com>
Tue, 24 Mar 2020 16:30:39 +0000 (17:30 +0100)
committerVasily Gorbik <gor@linux.ibm.com>
Fri, 27 Mar 2020 09:22:47 +0000 (10:22 +0100)
The s390 power management support has been removed. So the
api registration and the suspend and resume callbacks and
all the code related to this for the ap bus and the ap drivers
is removed with this patch.

Signed-off-by: Harald Freudenberger <freude@linux.ibm.com>
Reviewed-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
drivers/s390/crypto/ap_bus.c
drivers/s390/crypto/ap_bus.h
drivers/s390/crypto/ap_queue.c
drivers/s390/crypto/zcrypt_cex2a.c
drivers/s390/crypto/zcrypt_cex2c.c
drivers/s390/crypto/zcrypt_cex4.c

index c413211c61161edc39af941a0956936c8c69414b..35064443e748482d23dfd160725c3fdaaf5b9e9c 100644 (file)
 #include <linux/init.h>
 #include <linux/delay.h>
 #include <linux/err.h>
+#include <linux/freezer.h>
 #include <linux/interrupt.h>
 #include <linux/workqueue.h>
 #include <linux/slab.h>
 #include <linux/notifier.h>
 #include <linux/kthread.h>
 #include <linux/mutex.h>
-#include <linux/suspend.h>
 #include <asm/airq.h>
 #include <linux/atomic.h>
 #include <asm/isc.h>
@@ -103,16 +103,9 @@ static struct hrtimer ap_poll_timer;
  */
 static unsigned long long poll_timeout = 250000;
 
-/* Suspend flag */
-static int ap_suspend_flag;
 /* Maximum domain id */
 static int ap_max_domain_id;
-/*
- * Flag to check if domain was set through module parameter domain=. This is
- * important when supsend and resume is done in a z/VM environment where the
- * domain might change.
- */
-static int user_set_domain;
+
 static struct bus_type ap_bus_type;
 
 /* Adapter interrupt definitions */
@@ -386,8 +379,6 @@ void ap_request_timeout(struct timer_list *t)
 {
        struct ap_queue *aq = from_timer(aq, t, timeout);
 
-       if (ap_suspend_flag)
-               return;
        spin_lock_bh(&aq->lock);
        ap_wait(ap_sm_event(aq, AP_EVENT_TIMEOUT));
        spin_unlock_bh(&aq->lock);
@@ -401,8 +392,7 @@ void ap_request_timeout(struct timer_list *t)
  */
 static enum hrtimer_restart ap_poll_timeout(struct hrtimer *unused)
 {
-       if (!ap_suspend_flag)
-               tasklet_schedule(&ap_tasklet);
+       tasklet_schedule(&ap_tasklet);
        return HRTIMER_NORESTART;
 }
 
@@ -413,8 +403,7 @@ static enum hrtimer_restart ap_poll_timeout(struct hrtimer *unused)
 static void ap_interrupt_handler(struct airq_struct *airq, bool floating)
 {
        inc_irq_stat(IRQIO_APB);
-       if (!ap_suspend_flag)
-               tasklet_schedule(&ap_tasklet);
+       tasklet_schedule(&ap_tasklet);
 }
 
 /**
@@ -486,7 +475,7 @@ static int ap_poll_thread(void *data)
        while (!kthread_should_stop()) {
                add_wait_queue(&ap_poll_wait, &wait);
                set_current_state(TASK_INTERRUPTIBLE);
-               if (ap_suspend_flag || !ap_pending_requests()) {
+               if (!ap_pending_requests()) {
                        schedule();
                        try_to_freeze();
                }
@@ -587,33 +576,6 @@ static int ap_uevent(struct device *dev, struct kobj_uevent_env *env)
        return retval;
 }
 
-static void ap_bus_suspend(void)
-{
-       AP_DBF(DBF_DEBUG, "%s running\n", __func__);
-
-       ap_suspend_flag = 1;
-       /*
-        * Disable scanning for devices, thus we do not want to scan
-        * for them after removing.
-        */
-       flush_work(&ap_scan_work);
-       tasklet_disable(&ap_tasklet);
-}
-
-static int __ap_card_devices_unregister(struct device *dev, void *dummy)
-{
-       if (is_card_dev(dev))
-               device_unregister(dev);
-       return 0;
-}
-
-static int __ap_queue_devices_unregister(struct device *dev, void *dummy)
-{
-       if (is_queue_dev(dev))
-               device_unregister(dev);
-       return 0;
-}
-
 static int __ap_queue_devices_with_id_unregister(struct device *dev, void *data)
 {
        if (is_queue_dev(dev) &&
@@ -622,60 +584,6 @@ static int __ap_queue_devices_with_id_unregister(struct device *dev, void *data)
        return 0;
 }
 
-static void ap_bus_resume(void)
-{
-       int rc;
-
-       AP_DBF(DBF_DEBUG, "%s running\n", __func__);
-
-       /* remove all queue devices */
-       bus_for_each_dev(&ap_bus_type, NULL, NULL,
-                        __ap_queue_devices_unregister);
-       /* remove all card devices */
-       bus_for_each_dev(&ap_bus_type, NULL, NULL,
-                        __ap_card_devices_unregister);
-
-       /* Reset thin interrupt setting */
-       if (ap_interrupts_available() && !ap_using_interrupts()) {
-               rc = register_adapter_interrupt(&ap_airq);
-               ap_airq_flag = (rc == 0);
-       }
-       if (!ap_interrupts_available() && ap_using_interrupts()) {
-               unregister_adapter_interrupt(&ap_airq);
-               ap_airq_flag = 0;
-       }
-       /* Reset domain */
-       if (!user_set_domain)
-               ap_domain_index = -1;
-       /* Get things going again */
-       ap_suspend_flag = 0;
-       if (ap_airq_flag)
-               xchg(ap_airq.lsi_ptr, 0);
-       tasklet_enable(&ap_tasklet);
-       queue_work(system_long_wq, &ap_scan_work);
-}
-
-static int ap_power_event(struct notifier_block *this, unsigned long event,
-                         void *ptr)
-{
-       switch (event) {
-       case PM_HIBERNATION_PREPARE:
-       case PM_SUSPEND_PREPARE:
-               ap_bus_suspend();
-               break;
-       case PM_POST_HIBERNATION:
-       case PM_POST_SUSPEND:
-               ap_bus_resume();
-               break;
-       default:
-               break;
-       }
-       return NOTIFY_DONE;
-}
-static struct notifier_block ap_power_notifier = {
-       .notifier_call = ap_power_event,
-};
-
 static struct bus_type ap_bus_type = {
        .name = "ap",
        .match = &ap_bus_match,
@@ -852,8 +760,6 @@ EXPORT_SYMBOL(ap_driver_unregister);
 
 void ap_bus_force_rescan(void)
 {
-       if (ap_suspend_flag)
-               return;
        /* processing a asynchronous bus rescan */
        del_timer(&ap_config_timer);
        queue_work(system_long_wq, &ap_scan_work);
@@ -1546,8 +1452,6 @@ static void ap_scan_bus(struct work_struct *unused)
 
 static void ap_config_timeout(struct timer_list *unused)
 {
-       if (ap_suspend_flag)
-               return;
        queue_work(system_long_wq, &ap_scan_work);
 }
 
@@ -1620,11 +1524,6 @@ static int __init ap_module_init(void)
                        ap_domain_index);
                ap_domain_index = -1;
        }
-       /* In resume callback we need to know if the user had set the domain.
-        * If so, we can not just reset it.
-        */
-       if (ap_domain_index >= 0)
-               user_set_domain = 1;
 
        if (ap_interrupts_available()) {
                rc = register_adapter_interrupt(&ap_airq);
@@ -1667,17 +1566,11 @@ static int __init ap_module_init(void)
                        goto out_work;
        }
 
-       rc = register_pm_notifier(&ap_power_notifier);
-       if (rc)
-               goto out_pm;
-
        queue_work(system_long_wq, &ap_scan_work);
        initialised = true;
 
        return 0;
 
-out_pm:
-       ap_poll_thread_stop();
 out_work:
        hrtimer_cancel(&ap_poll_timer);
        root_device_unregister(ap_root_device);
index 4348fdff1c61ec95f1e81526361fee3bd6b550b5..8e8e37b6c0ee7d5a3bc20dd9ef787588be64bd08 100644 (file)
@@ -91,7 +91,6 @@ enum ap_state {
        AP_STATE_IDLE,
        AP_STATE_WORKING,
        AP_STATE_QUEUE_FULL,
-       AP_STATE_SUSPEND_WAIT,
        AP_STATE_REMOVE,        /* about to be removed from driver */
        AP_STATE_UNBOUND,       /* momentary not bound to a driver */
        AP_STATE_BORKED,        /* broken */
@@ -136,8 +135,6 @@ struct ap_driver {
 
        int (*probe)(struct ap_device *);
        void (*remove)(struct ap_device *);
-       void (*suspend)(struct ap_device *);
-       void (*resume)(struct ap_device *);
 };
 
 #define to_ap_drv(x) container_of((x), struct ap_driver, driver)
@@ -259,8 +256,6 @@ void ap_queue_init_reply(struct ap_queue *aq, struct ap_message *ap_msg);
 struct ap_queue *ap_queue_create(ap_qid_t qid, int device_type);
 void ap_queue_prepare_remove(struct ap_queue *aq);
 void ap_queue_remove(struct ap_queue *aq);
-void ap_queue_suspend(struct ap_device *ap_dev);
-void ap_queue_resume(struct ap_device *ap_dev);
 void ap_queue_init_state(struct ap_queue *aq);
 
 struct ap_card *ap_card_create(int id, int queue_depth, int raw_device_type,
index 9cb997cffa6178d677f952c0b564f2dcdbb48391..0eaf1d04e8df4b97180a08be3e626663abec9d69 100644 (file)
@@ -200,31 +200,6 @@ static enum ap_wait ap_sm_read(struct ap_queue *aq)
        }
 }
 
-/**
- * ap_sm_suspend_read(): Receive pending reply messages from an AP queue
- * without changing the device state in between. In suspend mode we don't
- * allow sending new requests, therefore just fetch pending replies.
- * @aq: pointer to the AP queue
- *
- * Returns AP_WAIT_NONE or AP_WAIT_AGAIN
- */
-static enum ap_wait ap_sm_suspend_read(struct ap_queue *aq)
-{
-       struct ap_queue_status status;
-
-       if (!aq->reply)
-               return AP_WAIT_NONE;
-       status = ap_sm_recv(aq);
-       switch (status.response_code) {
-       case AP_RESPONSE_NORMAL:
-               if (aq->queue_count > 0)
-                       return AP_WAIT_AGAIN;
-               fallthrough;
-       default:
-               return AP_WAIT_NONE;
-       }
-}
-
 /**
  * ap_sm_write(): Send messages from the request queue to an AP queue.
  * @aq: pointer to the AP queue
@@ -417,10 +392,6 @@ static ap_func_t *ap_jumptable[NR_AP_STATES][NR_AP_EVENTS] = {
                [AP_EVENT_POLL] = ap_sm_read,
                [AP_EVENT_TIMEOUT] = ap_sm_reset,
        },
-       [AP_STATE_SUSPEND_WAIT] = {
-               [AP_EVENT_POLL] = ap_sm_suspend_read,
-               [AP_EVENT_TIMEOUT] = ap_sm_nop,
-       },
        [AP_STATE_REMOVE] = {
                [AP_EVENT_POLL] = ap_sm_nop,
                [AP_EVENT_TIMEOUT] = ap_sm_nop,
@@ -449,28 +420,6 @@ enum ap_wait ap_sm_event_loop(struct ap_queue *aq, enum ap_event event)
        return wait;
 }
 
-/*
- * Power management for queue devices
- */
-void ap_queue_suspend(struct ap_device *ap_dev)
-{
-       struct ap_queue *aq = to_ap_queue(&ap_dev->device);
-
-       /* Poll on the device until all requests are finished. */
-       spin_lock_bh(&aq->lock);
-       aq->state = AP_STATE_SUSPEND_WAIT;
-       while (ap_sm_event(aq, AP_EVENT_POLL) != AP_WAIT_NONE)
-               ;
-       aq->state = AP_STATE_BORKED;
-       spin_unlock_bh(&aq->lock);
-}
-EXPORT_SYMBOL(ap_queue_suspend);
-
-void ap_queue_resume(struct ap_device *ap_dev)
-{
-}
-EXPORT_SYMBOL(ap_queue_resume);
-
 /*
  * AP queue related attributes.
  */
index 7cbb384ec5352d618d15f0015f7e60f87c9e4a09..b447f3e9e4a2cfafd14620f95a079752f480dc5a 100644 (file)
@@ -204,8 +204,6 @@ static void zcrypt_cex2a_queue_remove(struct ap_device *ap_dev)
 static struct ap_driver zcrypt_cex2a_queue_driver = {
        .probe = zcrypt_cex2a_queue_probe,
        .remove = zcrypt_cex2a_queue_remove,
-       .suspend = ap_queue_suspend,
-       .resume = ap_queue_resume,
        .ids = zcrypt_cex2a_queue_ids,
        .flags = AP_DRIVER_FLAG_DEFAULT,
 };
index c78c0d119806f17784a0a38dac53f6a48b616b6d..266440168bb76850050ee02ad345724586af4ca6 100644 (file)
@@ -260,8 +260,6 @@ static void zcrypt_cex2c_queue_remove(struct ap_device *ap_dev)
 static struct ap_driver zcrypt_cex2c_queue_driver = {
        .probe = zcrypt_cex2c_queue_probe,
        .remove = zcrypt_cex2c_queue_remove,
-       .suspend = ap_queue_suspend,
-       .resume = ap_queue_resume,
        .ids = zcrypt_cex2c_queue_ids,
        .flags = AP_DRIVER_FLAG_DEFAULT,
 };
index 8cfb1e2e9e1b0cc153262fe55f1423d077bee281..cdaa8348ad0412226998f2a721c1afd6871cad11 100644 (file)
@@ -656,8 +656,6 @@ static void zcrypt_cex4_queue_remove(struct ap_device *ap_dev)
 static struct ap_driver zcrypt_cex4_queue_driver = {
        .probe = zcrypt_cex4_queue_probe,
        .remove = zcrypt_cex4_queue_remove,
-       .suspend = ap_queue_suspend,
-       .resume = ap_queue_resume,
        .ids = zcrypt_cex4_queue_ids,
        .flags = AP_DRIVER_FLAG_DEFAULT,
 };