forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-10-09 244b2c5ca8b14627e4a17755e5922221e121c771
kernel/drivers/s390/char/sclp.c
....@@ -45,8 +45,8 @@
4545 /* Data for read and and init requests. */
4646 static struct sclp_req sclp_read_req;
4747 static struct sclp_req sclp_init_req;
48
-static char sclp_read_sccb[PAGE_SIZE] __attribute__((__aligned__(PAGE_SIZE)));
49
-static char sclp_init_sccb[PAGE_SIZE] __attribute__((__aligned__(PAGE_SIZE)));
48
+static void *sclp_read_sccb;
49
+static struct init_sccb *sclp_init_sccb;
5050
5151 /* Suspend request */
5252 static DECLARE_COMPLETION(sclp_request_queue_flushed);
....@@ -753,9 +753,8 @@
753753 static inline void
754754 __sclp_make_init_req(sccb_mask_t receive_mask, sccb_mask_t send_mask)
755755 {
756
- struct init_sccb *sccb;
756
+ struct init_sccb *sccb = sclp_init_sccb;
757757
758
- sccb = (struct init_sccb *) sclp_init_sccb;
759758 clear_page(sccb);
760759 memset(&sclp_init_req, 0, sizeof(struct sclp_req));
761760 sclp_init_req.command = SCLP_CMDW_WRITE_EVENT_MASK;
....@@ -782,7 +781,7 @@
782781 sclp_init_mask(int calculate)
783782 {
784783 unsigned long flags;
785
- struct init_sccb *sccb = (struct init_sccb *) sclp_init_sccb;
784
+ struct init_sccb *sccb = sclp_init_sccb;
786785 sccb_mask_t receive_mask;
787786 sccb_mask_t send_mask;
788787 int retry;
....@@ -1175,6 +1174,9 @@
11751174 if (sclp_init_state != sclp_init_state_uninitialized)
11761175 goto fail_unlock;
11771176 sclp_init_state = sclp_init_state_initializing;
1177
+ sclp_read_sccb = (void *) __get_free_page(GFP_ATOMIC | GFP_DMA);
1178
+ sclp_init_sccb = (void *) __get_free_page(GFP_ATOMIC | GFP_DMA);
1179
+ BUG_ON(!sclp_read_sccb || !sclp_init_sccb);
11781180 /* Set up variables */
11791181 INIT_LIST_HEAD(&sclp_req_queue);
11801182 INIT_LIST_HEAD(&sclp_reg_list);
....@@ -1207,6 +1209,8 @@
12071209 unregister_reboot_notifier(&sclp_reboot_notifier);
12081210 fail_init_state_uninitialized:
12091211 sclp_init_state = sclp_init_state_uninitialized;
1212
+ free_page((unsigned long) sclp_read_sccb);
1213
+ free_page((unsigned long) sclp_init_sccb);
12101214 fail_unlock:
12111215 spin_unlock_irqrestore(&sclp_lock, flags);
12121216 return rc;