diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2020-04-04 09:45:50 -0700 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2020-04-04 09:45:50 -0700 | 
| commit | ad0bf4eb91c2f9b93479b679e5472094ddb76da8 (patch) | |
| tree | 4025ab22e3ea949259a5078d06cf7a75afbb8ed3 /drivers/s390 | |
| parent | 5364abc57993b3bf60c41923cb98a8f1a594e749 (diff) | |
| parent | 1058c163dc31b3335c9cf7c4fa42ccf87be73017 (diff) | |
| download | linux-ad0bf4eb91c2f9b93479b679e5472094ddb76da8.tar.bz2 | |
Merge tag 's390-5.7-1' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux
Pull s390 updates from Vasily Gorbik:
 - Update maintainers. Niklas Schnelle takes over zpci and Vineeth
   Vijayan common io code.
 - Extend cpuinfo to include topology information.
 - Add new extended counters for IBM z15 and sampling buffer allocation
   rework in perf code.
 - Add control over zeroing out memory during system restart.
 - CCA protected key block version 2 support and other
   fixes/improvements in crypto code.
 - Convert to new fallthrough; annotations.
 - Replace zero-length arrays with flexible-arrays.
 - QDIO debugfs and other small improvements.
 - Drop 2-level paging support optimization for compat tasks. Varios mm
   cleanups.
 - Remove broken and unused hibernate / power management support.
 - Remove fake numa support which does not bring any benefits.
 - Exclude offline CPUs from CPU topology masks to be more consistent
   with other architectures.
 - Prevent last branching instruction address leaking to userspace.
 - Other small various fixes and improvements all over the code.
* tag 's390-5.7-1' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux: (57 commits)
  s390/mm: cleanup init_new_context() callback
  s390/mm: cleanup virtual memory constants usage
  s390/mm: remove page table downgrade support
  s390/qdio: set qdio_irq->cdev at allocation time
  s390/qdio: remove unused function declarations
  s390/ccwgroup: remove pm support
  s390/ap: remove power management code from ap bus and drivers
  s390/zcrypt: use kvmalloc instead of kmalloc for 256k alloc
  s390/mm: cleanup arch_get_unmapped_area() and friends
  s390/ism: remove pm support
  s390/cio: use fallthrough;
  s390/vfio: use fallthrough;
  s390/zcrypt: use fallthrough;
  s390: use fallthrough;
  s390/cpum_sf: Fix wrong page count in error message
  s390/diag: fix display of diagnose call statistics
  s390/ap: Remove ap device suspend and resume callbacks
  s390/pci: Improve handling of unset UID
  s390/pci: Fix zpci_alloc_domain() over allocation
  s390/qdio: pass ISC as parameter to chsc_sadc()
  ...
Diffstat (limited to 'drivers/s390')
38 files changed, 218 insertions, 506 deletions
| diff --git a/drivers/s390/block/dasd_diag.c b/drivers/s390/block/dasd_diag.c index 8d4971645cf1..facb588d09e4 100644 --- a/drivers/s390/block/dasd_diag.c +++ b/drivers/s390/block/dasd_diag.c @@ -58,7 +58,7 @@ struct dasd_diag_private {  struct dasd_diag_req {  	unsigned int block_count; -	struct dasd_diag_bio bio[0]; +	struct dasd_diag_bio bio[];  };  static const u8 DASD_DIAG_CMS1[] = { 0xc3, 0xd4, 0xe2, 0xf1 };/* EBCDIC CMS1 */ diff --git a/drivers/s390/block/dasd_eckd.h b/drivers/s390/block/dasd_eckd.h index 6943508d0f1d..ca24a78a256e 100644 --- a/drivers/s390/block/dasd_eckd.h +++ b/drivers/s390/block/dasd_eckd.h @@ -220,7 +220,7 @@ struct LRE_eckd_data {  	__u8 imbedded_count;  	__u8 extended_operation;  	__u16 extended_parameter_length; -	__u8 extended_parameter[0]; +	__u8 extended_parameter[];  } __attribute__ ((packed));  /* Prefix data for format 0x00 and 0x01 */ diff --git a/drivers/s390/char/con3215.c b/drivers/s390/char/con3215.c index e7cf0a1d4f71..92757f9bd010 100644 --- a/drivers/s390/char/con3215.c +++ b/drivers/s390/char/con3215.c @@ -398,7 +398,7 @@ static void raw3215_irq(struct ccw_device *cdev, unsigned long intparm,  		}  		if (dstat == 0x08)  			break; -		/* else, fall through */ +		fallthrough;  	case 0x04:  		/* Device end interrupt. */  		if ((raw = req->info) == NULL) diff --git a/drivers/s390/char/hmcdrv_ftp.c b/drivers/s390/char/hmcdrv_ftp.c index 0e70397d6e04..37ee8f698c3b 100644 --- a/drivers/s390/char/hmcdrv_ftp.c +++ b/drivers/s390/char/hmcdrv_ftp.c @@ -137,7 +137,7 @@ static int hmcdrv_ftp_parse(char *cmd, struct hmcdrv_ftp_cmdspec *ftp)  			while ((*cmd != '\0') && !iscntrl(*cmd))  				++cmd;  			ftp->fname = start; -			/* fall through */ +			fallthrough;  		default:  			*cmd = '\0';  			break; diff --git a/drivers/s390/char/raw3270.h b/drivers/s390/char/raw3270.h index 3afaa35f7351..08f36e973b43 100644 --- a/drivers/s390/char/raw3270.h +++ b/drivers/s390/char/raw3270.h @@ -211,7 +211,7 @@ struct string  	struct list_head update;  	unsigned long size;  	unsigned long len; -	char string[0]; +	char string[];  } __attribute__ ((aligned(8)));  static inline struct string * diff --git a/drivers/s390/char/sclp_cmd.c b/drivers/s390/char/sclp_cmd.c index 37d42de06079..a864b21af602 100644 --- a/drivers/s390/char/sclp_cmd.c +++ b/drivers/s390/char/sclp_cmd.c @@ -406,7 +406,7 @@ static void __init add_memory_merged(u16 rn)  	if (!size)  		goto skip_add;  	for (addr = start; addr < start + size; addr += block_size) -		add_memory(numa_pfn_to_nid(PFN_DOWN(addr)), addr, block_size); +		add_memory(0, addr, block_size);  skip_add:  	first_rn = rn;  	num = 1; diff --git a/drivers/s390/char/sclp_pci.c b/drivers/s390/char/sclp_pci.c index 995e9196852e..a3e5a5fb0c1e 100644 --- a/drivers/s390/char/sclp_pci.c +++ b/drivers/s390/char/sclp_pci.c @@ -39,7 +39,7 @@ struct err_notify_evbuf {  	u8 atype;  	u32 fh;  	u32 fid; -	u8 data[0]; +	u8 data[];  } __packed;  struct err_notify_sccb { diff --git a/drivers/s390/char/sclp_sdias.c b/drivers/s390/char/sclp_sdias.c index 13f97fd73aca..644b61013679 100644 --- a/drivers/s390/char/sclp_sdias.c +++ b/drivers/s390/char/sclp_sdias.c @@ -214,7 +214,7 @@ int sclp_sdias_copy(void *dest, int start_blk, int nr_blks)  		break;  	case SDIAS_EVSTATE_NO_DATA:  		TRACE("no data\n"); -		/* fall through */ +		fallthrough;  	default:  		pr_err("Error from SCLP while copying hsa. Event status = %x\n",  		       sdias_evbuf.event_status); diff --git a/drivers/s390/char/tape_core.c b/drivers/s390/char/tape_core.c index 3e0b2f63a9d2..380e6a67719c 100644 --- a/drivers/s390/char/tape_core.c +++ b/drivers/s390/char/tape_core.c @@ -677,7 +677,7 @@ tape_generic_remove(struct ccw_device *cdev)  	switch (device->tape_state) {  		case TS_INIT:  			tape_state_set(device, TS_NOT_OPER); -			/* fallthrough */ +			fallthrough;  		case TS_NOT_OPER:  			/*  			 * Nothing to do. @@ -950,7 +950,7 @@ __tape_start_request(struct tape_device *device, struct tape_request *request)  				break;  			if (device->tape_state == TS_UNUSED)  				break; -			/* fallthrough */ +			fallthrough;  		default:  			if (device->tape_state == TS_BLKUSE)  				break; @@ -1118,7 +1118,7 @@ __tape_do_irq (struct ccw_device *cdev, unsigned long intparm, struct irb *irb)  			case -ETIMEDOUT:  				DBF_LH(1, "(%08x): Request timed out\n",  				       device->cdev_id); -				/* fallthrough */ +				fallthrough;  			case -EIO:  				__tape_end_request(device, request, -EIO);  				break; diff --git a/drivers/s390/cio/airq.c b/drivers/s390/cio/airq.c index 427b2e24a8ce..cb466ed7eb5e 100644 --- a/drivers/s390/cio/airq.c +++ b/drivers/s390/cio/airq.c @@ -105,16 +105,12 @@ static irqreturn_t do_airq_interrupt(int irq, void *dummy)  	return IRQ_HANDLED;  } -static struct irqaction airq_interrupt = { -	.name	 = "AIO", -	.handler = do_airq_interrupt, -}; -  void __init init_airq_interrupts(void)  {  	irq_set_chip_and_handler(THIN_INTERRUPT,  				 &dummy_irq_chip, handle_percpu_irq); -	setup_irq(THIN_INTERRUPT, &airq_interrupt); +	if (request_irq(THIN_INTERRUPT, do_airq_interrupt, 0, "AIO", NULL)) +		panic("Failed to register AIO interrupt\n");  }  static inline unsigned long iv_size(unsigned long bits) diff --git a/drivers/s390/cio/ccwgroup.c b/drivers/s390/cio/ccwgroup.c index b42a93736668..483a9ecfcbb1 100644 --- a/drivers/s390/cio/ccwgroup.c +++ b/drivers/s390/cio/ccwgroup.c @@ -485,79 +485,10 @@ static void ccwgroup_shutdown(struct device *dev)  		gdrv->shutdown(gdev);  } -static int ccwgroup_pm_prepare(struct device *dev) -{ -	struct ccwgroup_device *gdev = to_ccwgroupdev(dev); -	struct ccwgroup_driver *gdrv = to_ccwgroupdrv(gdev->dev.driver); - -	/* Fail while device is being set online/offline. */ -	if (atomic_read(&gdev->onoff)) -		return -EAGAIN; - -	if (!gdev->dev.driver || gdev->state != CCWGROUP_ONLINE) -		return 0; - -	return gdrv->prepare ? gdrv->prepare(gdev) : 0; -} - -static void ccwgroup_pm_complete(struct device *dev) -{ -	struct ccwgroup_device *gdev = to_ccwgroupdev(dev); -	struct ccwgroup_driver *gdrv = to_ccwgroupdrv(dev->driver); - -	if (!gdev->dev.driver || gdev->state != CCWGROUP_ONLINE) -		return; - -	if (gdrv->complete) -		gdrv->complete(gdev); -} - -static int ccwgroup_pm_freeze(struct device *dev) -{ -	struct ccwgroup_device *gdev = to_ccwgroupdev(dev); -	struct ccwgroup_driver *gdrv = to_ccwgroupdrv(gdev->dev.driver); - -	if (!gdev->dev.driver || gdev->state != CCWGROUP_ONLINE) -		return 0; - -	return gdrv->freeze ? gdrv->freeze(gdev) : 0; -} - -static int ccwgroup_pm_thaw(struct device *dev) -{ -	struct ccwgroup_device *gdev = to_ccwgroupdev(dev); -	struct ccwgroup_driver *gdrv = to_ccwgroupdrv(gdev->dev.driver); - -	if (!gdev->dev.driver || gdev->state != CCWGROUP_ONLINE) -		return 0; - -	return gdrv->thaw ? gdrv->thaw(gdev) : 0; -} - -static int ccwgroup_pm_restore(struct device *dev) -{ -	struct ccwgroup_device *gdev = to_ccwgroupdev(dev); -	struct ccwgroup_driver *gdrv = to_ccwgroupdrv(gdev->dev.driver); - -	if (!gdev->dev.driver || gdev->state != CCWGROUP_ONLINE) -		return 0; - -	return gdrv->restore ? gdrv->restore(gdev) : 0; -} - -static const struct dev_pm_ops ccwgroup_pm_ops = { -	.prepare = ccwgroup_pm_prepare, -	.complete = ccwgroup_pm_complete, -	.freeze = ccwgroup_pm_freeze, -	.thaw = ccwgroup_pm_thaw, -	.restore = ccwgroup_pm_restore, -}; -  static struct bus_type ccwgroup_bus_type = {  	.name   = "ccwgroup",  	.remove = ccwgroup_remove,  	.shutdown = ccwgroup_shutdown, -	.pm = &ccwgroup_pm_ops,  };  bool dev_is_ccwgroup(struct device *dev) diff --git a/drivers/s390/cio/chsc.c b/drivers/s390/cio/chsc.c index 6392a1b95b02..1ca73c2e5a8f 100644 --- a/drivers/s390/cio/chsc.c +++ b/drivers/s390/cio/chsc.c @@ -180,11 +180,12 @@ EXPORT_SYMBOL_GPL(chsc_ssqd);   * @scssc: request and response block for SADC   * @summary_indicator_addr: summary indicator address   * @subchannel_indicator_addr: subchannel indicator address + * @isc: Interruption Subclass for this subchannel   *   * Returns 0 on success.   */  int chsc_sadc(struct subchannel_id schid, struct chsc_scssc_area *scssc, -	      u64 summary_indicator_addr, u64 subchannel_indicator_addr) +	      u64 summary_indicator_addr, u64 subchannel_indicator_addr, u8 isc)  {  	memset(scssc, 0, sizeof(*scssc));  	scssc->request.length = 0x0fe0; @@ -196,7 +197,7 @@ int chsc_sadc(struct subchannel_id schid, struct chsc_scssc_area *scssc,  	scssc->ks = PAGE_DEFAULT_KEY >> 4;  	scssc->kc = PAGE_DEFAULT_KEY >> 4; -	scssc->isc = QDIO_AIRQ_ISC; +	scssc->isc = isc;  	scssc->schid = schid;  	/* enable the time delay disablement facility */ diff --git a/drivers/s390/cio/chsc.h b/drivers/s390/cio/chsc.h index e57d68e325a3..34de6d77442c 100644 --- a/drivers/s390/cio/chsc.h +++ b/drivers/s390/cio/chsc.h @@ -163,7 +163,8 @@ void chsc_chp_offline(struct chp_id chpid);  int chsc_get_channel_measurement_chars(struct channel_path *chp);  int chsc_ssqd(struct subchannel_id schid, struct chsc_ssqd_area *ssqd);  int chsc_sadc(struct subchannel_id schid, struct chsc_scssc_area *scssc, -	      u64 summary_indicator_addr, u64 subchannel_indicator_addr); +	      u64 summary_indicator_addr, u64 subchannel_indicator_addr, +	      u8 isc);  int chsc_sgib(u32 origin);  int chsc_error_from_response(int response); diff --git a/drivers/s390/cio/cio.c b/drivers/s390/cio/cio.c index 18f5458f90e8..6d716db2a46a 100644 --- a/drivers/s390/cio/cio.c +++ b/drivers/s390/cio/cio.c @@ -563,16 +563,12 @@ static irqreturn_t do_cio_interrupt(int irq, void *dummy)  	return IRQ_HANDLED;  } -static struct irqaction io_interrupt = { -	.name	 = "I/O", -	.handler = do_cio_interrupt, -}; -  void __init init_cio_interrupts(void)  {  	irq_set_chip_and_handler(IO_INTERRUPT,  				 &dummy_irq_chip, handle_percpu_irq); -	setup_irq(IO_INTERRUPT, &io_interrupt); +	if (request_irq(IO_INTERRUPT, do_cio_interrupt, 0, "I/O", NULL)) +		panic("Failed to register I/O interrupt\n");  }  #ifdef CONFIG_CCW_CONSOLE diff --git a/drivers/s390/cio/device.c b/drivers/s390/cio/device.c index 0c6245fc7706..50007cb9be5b 100644 --- a/drivers/s390/cio/device.c +++ b/drivers/s390/cio/device.c @@ -1262,7 +1262,7 @@ static int recovery_check(struct device *dev, void *data)  		sch = to_subchannel(cdev->dev.parent);  		if ((sch->schib.pmcw.pam & sch->opm) == sch->vpm)  			break; -		/* fall through */ +		fallthrough;  	case DEV_STATE_DISCONNECTED:  		CIO_MSG_EVENT(3, "recovery: trigger 0.%x.%04x\n",  			      cdev->private->dev_id.ssid, @@ -2091,7 +2091,7 @@ static void ccw_device_todo(struct work_struct *work)  	case CDEV_TODO_UNREG_EVAL:  		if (!sch_is_pseudo_sch(sch))  			css_schedule_eval(sch->schid); -		/* fall-through */ +		fallthrough;  	case CDEV_TODO_UNREG:  		if (sch_is_pseudo_sch(sch))  			ccw_device_unregister(cdev); diff --git a/drivers/s390/cio/idset.c b/drivers/s390/cio/idset.c index 835de44dbbcc..77d0ea7b381b 100644 --- a/drivers/s390/cio/idset.c +++ b/drivers/s390/cio/idset.c @@ -13,7 +13,7 @@  struct idset {  	int num_ssid;  	int num_id; -	unsigned long bitmap[0]; +	unsigned long bitmap[];  };  static inline unsigned long bitmap_size(int num_ssid, int num_id) diff --git a/drivers/s390/cio/qdio.h b/drivers/s390/cio/qdio.h index f72f961cc78f..b0beafc43d37 100644 --- a/drivers/s390/cio/qdio.h +++ b/drivers/s390/cio/qdio.h @@ -250,7 +250,6 @@ struct qdio_q {  	/* upper-layer program handler */  	qdio_handler_t (*handler); -	struct dentry *debugfs_q;  	struct qdio_irq *irq_ptr;  	struct sl *sl;  	/* @@ -266,7 +265,6 @@ struct qdio_irq {  	struct ccw_device *cdev;  	struct list_head entry;		/* list of thinint devices */  	struct dentry *debugfs_dev; -	struct dentry *debugfs_perf;  	unsigned long int_parm;  	struct subchannel_id schid; @@ -391,12 +389,9 @@ void qdio_setup_ssqd_info(struct qdio_irq *irq_ptr);  int qdio_setup_get_ssqd(struct qdio_irq *irq_ptr,  			struct subchannel_id *schid,  			struct qdio_ssqd_desc *data); -int qdio_setup_irq(struct qdio_initialize *init_data); -void qdio_print_subchannel_info(struct qdio_irq *irq_ptr, -				struct ccw_device *cdev); +int qdio_setup_irq(struct qdio_irq *irq_ptr, struct qdio_initialize *init_data); +void qdio_print_subchannel_info(struct qdio_irq *irq_ptr);  void qdio_release_memory(struct qdio_irq *irq_ptr); -int qdio_setup_create_sysfs(struct ccw_device *cdev); -void qdio_setup_destroy_sysfs(struct ccw_device *cdev);  int qdio_setup_init(void);  void qdio_setup_exit(void);  int qdio_enable_async_operation(struct qdio_output_q *q); diff --git a/drivers/s390/cio/qdio_debug.c b/drivers/s390/cio/qdio_debug.c index 00244607c8c0..5a3d9ee90a7f 100644 --- a/drivers/s390/cio/qdio_debug.c +++ b/drivers/s390/cio/qdio_debug.c @@ -81,7 +81,7 @@ int qdio_allocate_dbf(struct qdio_initialize *init_data,  	/* allocate trace view for the interface */  	snprintf(text, QDIO_DBF_NAME_LEN, "qdio_%s", -					dev_name(&init_data->cdev->dev)); +		 dev_name(&irq_ptr->cdev->dev));  	irq_ptr->debug_area = qdio_get_dbf_entry(text);  	if (irq_ptr->debug_area)  		DBF_DEV_EVENT(DBF_ERR, irq_ptr, "dbf reused"); @@ -190,6 +190,23 @@ static int qstat_show(struct seq_file *m, void *v)  DEFINE_SHOW_ATTRIBUTE(qstat); +static int ssqd_show(struct seq_file *m, void *v) +{ +	struct ccw_device *cdev = m->private; +	struct qdio_ssqd_desc ssqd; +	int rc; + +	rc = qdio_get_ssqd_desc(cdev, &ssqd); +	if (rc) +		return rc; + +	seq_hex_dump(m, "", DUMP_PREFIX_NONE, 16, 4, &ssqd, sizeof(ssqd), +		     false); +	return 0; +} + +DEFINE_SHOW_ATTRIBUTE(ssqd); +  static char *qperf_names[] = {  	"Assumed adapter interrupts",  	"QDIO interrupts", @@ -284,53 +301,37 @@ static const struct file_operations debugfs_perf_fops = {  	.release = single_release,  }; -static void setup_debugfs_entry(struct qdio_q *q) +static void setup_debugfs_entry(struct dentry *parent, struct qdio_q *q)  {  	char name[QDIO_DEBUGFS_NAME_LEN];  	snprintf(name, QDIO_DEBUGFS_NAME_LEN, "%s_%d",  		 q->is_input_q ? "input" : "output",  		 q->nr); -	q->debugfs_q = debugfs_create_file(name, 0444, -				q->irq_ptr->debugfs_dev, q, &qstat_fops); -	if (IS_ERR(q->debugfs_q)) -		q->debugfs_q = NULL; +	debugfs_create_file(name, 0444, parent, q, &qstat_fops);  } -void qdio_setup_debug_entries(struct qdio_irq *irq_ptr, struct ccw_device *cdev) +void qdio_setup_debug_entries(struct qdio_irq *irq_ptr)  {  	struct qdio_q *q;  	int i; -	irq_ptr->debugfs_dev = debugfs_create_dir(dev_name(&cdev->dev), +	irq_ptr->debugfs_dev = debugfs_create_dir(dev_name(&irq_ptr->cdev->dev),  						  debugfs_root); -	if (IS_ERR(irq_ptr->debugfs_dev)) -		irq_ptr->debugfs_dev = NULL; - -	irq_ptr->debugfs_perf = debugfs_create_file("statistics", -				S_IFREG | S_IRUGO | S_IWUSR, -				irq_ptr->debugfs_dev, irq_ptr, -				&debugfs_perf_fops); -	if (IS_ERR(irq_ptr->debugfs_perf)) -		irq_ptr->debugfs_perf = NULL; +	debugfs_create_file("statistics", S_IFREG | S_IRUGO | S_IWUSR, +			    irq_ptr->debugfs_dev, irq_ptr, &debugfs_perf_fops); +	debugfs_create_file("ssqd", 0444, irq_ptr->debugfs_dev, irq_ptr->cdev, +			    &ssqd_fops);  	for_each_input_queue(irq_ptr, q, i) -		setup_debugfs_entry(q); +		setup_debugfs_entry(irq_ptr->debugfs_dev, q);  	for_each_output_queue(irq_ptr, q, i) -		setup_debugfs_entry(q); +		setup_debugfs_entry(irq_ptr->debugfs_dev, q);  }  void qdio_shutdown_debug_entries(struct qdio_irq *irq_ptr)  { -	struct qdio_q *q; -	int i; - -	for_each_input_queue(irq_ptr, q, i) -		debugfs_remove(q->debugfs_q); -	for_each_output_queue(irq_ptr, q, i) -		debugfs_remove(q->debugfs_q); -	debugfs_remove(irq_ptr->debugfs_perf); -	debugfs_remove(irq_ptr->debugfs_dev); +	debugfs_remove_recursive(irq_ptr->debugfs_dev);  }  int __init qdio_debug_init(void) @@ -352,7 +353,7 @@ int __init qdio_debug_init(void)  void qdio_debug_exit(void)  {  	qdio_clear_dbf_list(); -	debugfs_remove(debugfs_root); +	debugfs_remove_recursive(debugfs_root);  	debug_unregister(qdio_dbf_setup);  	debug_unregister(qdio_dbf_error);  } diff --git a/drivers/s390/cio/qdio_debug.h b/drivers/s390/cio/qdio_debug.h index f85f5fa7cefc..122450ba6b90 100644 --- a/drivers/s390/cio/qdio_debug.h +++ b/drivers/s390/cio/qdio_debug.h @@ -66,8 +66,7 @@ static inline void DBF_DEV_HEX(struct qdio_irq *dev, void *addr,  int qdio_allocate_dbf(struct qdio_initialize *init_data,  		       struct qdio_irq *irq_ptr); -void qdio_setup_debug_entries(struct qdio_irq *irq_ptr, -			      struct ccw_device *cdev); +void qdio_setup_debug_entries(struct qdio_irq *irq_ptr);  void qdio_shutdown_debug_entries(struct qdio_irq *irq_ptr);  int qdio_debug_init(void);  void qdio_debug_exit(void); diff --git a/drivers/s390/cio/qdio_main.c b/drivers/s390/cio/qdio_main.c index 02ced5949287..c890848064fe 100644 --- a/drivers/s390/cio/qdio_main.c +++ b/drivers/s390/cio/qdio_main.c @@ -1100,9 +1100,8 @@ int qdio_get_ssqd_desc(struct ccw_device *cdev,  }  EXPORT_SYMBOL_GPL(qdio_get_ssqd_desc); -static void qdio_shutdown_queues(struct ccw_device *cdev) +static void qdio_shutdown_queues(struct qdio_irq *irq_ptr)  { -	struct qdio_irq *irq_ptr = cdev->private->qdio_data;  	struct qdio_q *q;  	int i; @@ -1150,7 +1149,7 @@ int qdio_shutdown(struct ccw_device *cdev, int how)  	qdio_set_state(irq_ptr, QDIO_IRQ_STATE_STOPPED);  	tiqdio_remove_device(irq_ptr); -	qdio_shutdown_queues(cdev); +	qdio_shutdown_queues(irq_ptr);  	qdio_shutdown_debug_entries(irq_ptr);  	/* cleanup subchannel */ @@ -1225,10 +1224,11 @@ EXPORT_SYMBOL_GPL(qdio_free);   */  int qdio_allocate(struct qdio_initialize *init_data)  { +	struct ccw_device *cdev = init_data->cdev;  	struct subchannel_id schid;  	struct qdio_irq *irq_ptr; -	ccw_device_get_schid(init_data->cdev, &schid); +	ccw_device_get_schid(cdev, &schid);  	DBF_EVENT("qallocate:%4x", schid.sch_no);  	if ((init_data->no_input_qs && !init_data->input_handler) || @@ -1248,6 +1248,7 @@ int qdio_allocate(struct qdio_initialize *init_data)  	if (!irq_ptr)  		goto out_err; +	irq_ptr->cdev = cdev;  	mutex_init(&irq_ptr->setup_mutex);  	if (qdio_allocate_dbf(init_data, irq_ptr))  		goto out_rel; @@ -1272,7 +1273,7 @@ int qdio_allocate(struct qdio_initialize *init_data)  		goto out_rel;  	INIT_LIST_HEAD(&irq_ptr->entry); -	init_data->cdev->private->qdio_data = irq_ptr; +	cdev->private->qdio_data = irq_ptr;  	qdio_set_state(irq_ptr, QDIO_IRQ_STATE_INACTIVE);  	return 0;  out_rel: @@ -1311,19 +1312,18 @@ static void qdio_detect_hsicq(struct qdio_irq *irq_ptr)  int qdio_establish(struct qdio_initialize *init_data)  {  	struct ccw_device *cdev = init_data->cdev; +	struct qdio_irq *irq_ptr = cdev->private->qdio_data;  	struct subchannel_id schid; -	struct qdio_irq *irq_ptr;  	int rc;  	ccw_device_get_schid(cdev, &schid);  	DBF_EVENT("qestablish:%4x", schid.sch_no); -	irq_ptr = cdev->private->qdio_data;  	if (!irq_ptr)  		return -ENODEV;  	mutex_lock(&irq_ptr->setup_mutex); -	qdio_setup_irq(init_data); +	qdio_setup_irq(irq_ptr, init_data);  	rc = qdio_establish_thinint(irq_ptr);  	if (rc) { @@ -1369,8 +1369,8 @@ int qdio_establish(struct qdio_initialize *init_data)  	qdio_init_buf_states(irq_ptr);  	mutex_unlock(&irq_ptr->setup_mutex); -	qdio_print_subchannel_info(irq_ptr, cdev); -	qdio_setup_debug_entries(irq_ptr, cdev); +	qdio_print_subchannel_info(irq_ptr); +	qdio_setup_debug_entries(irq_ptr);  	return 0;  }  EXPORT_SYMBOL_GPL(qdio_establish); @@ -1381,14 +1381,13 @@ EXPORT_SYMBOL_GPL(qdio_establish);   */  int qdio_activate(struct ccw_device *cdev)  { +	struct qdio_irq *irq_ptr = cdev->private->qdio_data;  	struct subchannel_id schid; -	struct qdio_irq *irq_ptr;  	int rc;  	ccw_device_get_schid(cdev, &schid);  	DBF_EVENT("qactivate:%4x", schid.sch_no); -	irq_ptr = cdev->private->qdio_data;  	if (!irq_ptr)  		return -ENODEV; diff --git a/drivers/s390/cio/qdio_setup.c b/drivers/s390/cio/qdio_setup.c index 7b831bb4e229..bbbefc9f9e04 100644 --- a/drivers/s390/cio/qdio_setup.c +++ b/drivers/s390/cio/qdio_setup.c @@ -449,10 +449,10 @@ static void setup_qib(struct qdio_irq *irq_ptr,  	memcpy(irq_ptr->qib.ebcnam, init_data->adapter_name, 8);  } -int qdio_setup_irq(struct qdio_initialize *init_data) +int qdio_setup_irq(struct qdio_irq *irq_ptr, struct qdio_initialize *init_data)  { +	struct ccw_device *cdev = irq_ptr->cdev;  	struct ciw *ciw; -	struct qdio_irq *irq_ptr = init_data->cdev->private->qdio_data;  	memset(&irq_ptr->qib, 0, sizeof(irq_ptr->qib));  	memset(&irq_ptr->siga_flag, 0, sizeof(irq_ptr->siga_flag)); @@ -460,8 +460,9 @@ int qdio_setup_irq(struct qdio_initialize *init_data)  	memset(&irq_ptr->ssqd_desc, 0, sizeof(irq_ptr->ssqd_desc));  	memset(&irq_ptr->perf_stat, 0, sizeof(irq_ptr->perf_stat)); -	irq_ptr->debugfs_dev = irq_ptr->debugfs_perf = NULL; -	irq_ptr->sch_token = irq_ptr->state = irq_ptr->perf_stat_enabled = 0; +	irq_ptr->debugfs_dev = NULL; +	irq_ptr->sch_token = irq_ptr->perf_stat_enabled = 0; +	irq_ptr->state = QDIO_IRQ_STATE_INACTIVE;  	/* wipes qib.ac, required by ar7063 */  	memset(irq_ptr->qdr, 0, sizeof(struct qdr)); @@ -469,9 +470,8 @@ int qdio_setup_irq(struct qdio_initialize *init_data)  	irq_ptr->int_parm = init_data->int_parm;  	irq_ptr->nr_input_qs = init_data->no_input_qs;  	irq_ptr->nr_output_qs = init_data->no_output_qs; -	irq_ptr->cdev = init_data->cdev;  	irq_ptr->scan_threshold = init_data->scan_threshold; -	ccw_device_get_schid(irq_ptr->cdev, &irq_ptr->schid); +	ccw_device_get_schid(cdev, &irq_ptr->schid);  	setup_queues(irq_ptr, init_data);  	if (init_data->irq_poll) { @@ -494,14 +494,14 @@ int qdio_setup_irq(struct qdio_initialize *init_data)  	/* qdr, qib, sls, slsbs, slibs, sbales are filled now */  	/* get qdio commands */ -	ciw = ccw_device_get_ciw(init_data->cdev, CIW_TYPE_EQUEUE); +	ciw = ccw_device_get_ciw(cdev, CIW_TYPE_EQUEUE);  	if (!ciw) {  		DBF_ERROR("%4x NO EQ", irq_ptr->schid.sch_no);  		return -EINVAL;  	}  	irq_ptr->equeue = *ciw; -	ciw = ccw_device_get_ciw(init_data->cdev, CIW_TYPE_AQUEUE); +	ciw = ccw_device_get_ciw(cdev, CIW_TYPE_AQUEUE);  	if (!ciw) {  		DBF_ERROR("%4x NO AQ", irq_ptr->schid.sch_no);  		return -EINVAL; @@ -509,21 +509,20 @@ int qdio_setup_irq(struct qdio_initialize *init_data)  	irq_ptr->aqueue = *ciw;  	/* set new interrupt handler */ -	spin_lock_irq(get_ccwdev_lock(irq_ptr->cdev)); -	irq_ptr->orig_handler = init_data->cdev->handler; -	init_data->cdev->handler = qdio_int_handler; -	spin_unlock_irq(get_ccwdev_lock(irq_ptr->cdev)); +	spin_lock_irq(get_ccwdev_lock(cdev)); +	irq_ptr->orig_handler = cdev->handler; +	cdev->handler = qdio_int_handler; +	spin_unlock_irq(get_ccwdev_lock(cdev));  	return 0;  } -void qdio_print_subchannel_info(struct qdio_irq *irq_ptr, -				struct ccw_device *cdev) +void qdio_print_subchannel_info(struct qdio_irq *irq_ptr)  {  	char s[80];  	snprintf(s, 80, "qdio: %s %s on SC %x using "  		 "AI:%d QEBSM:%d PRI:%d TDD:%d SIGA:%s%s%s%s%s\n", -		 dev_name(&cdev->dev), +		 dev_name(&irq_ptr->cdev->dev),  		 (irq_ptr->qib.qfmt == QDIO_QETH_QFMT) ? "OSA" :  			((irq_ptr->qib.qfmt == QDIO_ZFCP_QFMT) ? "ZFCP" : "HS"),  		 irq_ptr->schid.sch_no, diff --git a/drivers/s390/cio/qdio_thinint.c b/drivers/s390/cio/qdio_thinint.c index 8f315c53de23..ea09df7209f0 100644 --- a/drivers/s390/cio/qdio_thinint.c +++ b/drivers/s390/cio/qdio_thinint.c @@ -207,7 +207,7 @@ static int set_subchannel_ind(struct qdio_irq *irq_ptr, int reset)  	}  	rc = chsc_sadc(irq_ptr->schid, scssc, summary_indicator_addr, -		       subchannel_indicator_addr); +		       subchannel_indicator_addr, tiqdio_airq.isc);  	if (rc) {  		DBF_ERROR("%4x SSI r:%4x", irq_ptr->schid.sch_no,  			  scssc->response.code); diff --git a/drivers/s390/crypto/ap_bus.c b/drivers/s390/crypto/ap_bus.c index 5256e3ce84e5..35064443e748 100644 --- a/drivers/s390/crypto/ap_bus.c +++ b/drivers/s390/crypto/ap_bus.c @@ -18,13 +18,13 @@  #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 */ @@ -360,7 +353,7 @@ void ap_wait(enum ap_wait wait)  			wake_up(&ap_poll_wait);  			break;  		} -		/* Fall through */ +		fallthrough;  	case AP_WAIT_TIMEOUT:  		spin_lock_bh(&ap_poll_timer_lock);  		if (!hrtimer_is_queued(&ap_poll_timer)) { @@ -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,51 +576,6 @@ static int ap_uevent(struct device *dev, struct kobj_uevent_env *env)  	return retval;  } -static int ap_dev_suspend(struct device *dev) -{ -	struct ap_device *ap_dev = to_ap_dev(dev); - -	if (ap_dev->drv && ap_dev->drv->suspend) -		ap_dev->drv->suspend(ap_dev); -	return 0; -} - -static int ap_dev_resume(struct device *dev) -{ -	struct ap_device *ap_dev = to_ap_dev(dev); - -	if (ap_dev->drv && ap_dev->drv->resume) -		ap_dev->drv->resume(ap_dev); -	return 0; -} - -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) && @@ -640,67 +584,10 @@ 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 SIMPLE_DEV_PM_OPS(ap_bus_pm_ops, ap_dev_suspend, ap_dev_resume); -  static struct bus_type ap_bus_type = {  	.name = "ap",  	.match = &ap_bus_match,  	.uevent = &ap_uevent, -	.pm = &ap_bus_pm_ops,  };  static int __ap_revise_reserved(struct device *dev, void *dummy) @@ -873,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); @@ -1021,7 +906,7 @@ EXPORT_SYMBOL(ap_parse_mask_str);  static ssize_t ap_domain_show(struct bus_type *bus, char *buf)  { -	return snprintf(buf, PAGE_SIZE, "%d\n", ap_domain_index); +	return scnprintf(buf, PAGE_SIZE, "%d\n", ap_domain_index);  }  static ssize_t ap_domain_store(struct bus_type *bus, @@ -1047,14 +932,14 @@ static BUS_ATTR_RW(ap_domain);  static ssize_t ap_control_domain_mask_show(struct bus_type *bus, char *buf)  {  	if (!ap_configuration)	/* QCI not supported */ -		return snprintf(buf, PAGE_SIZE, "not supported\n"); +		return scnprintf(buf, PAGE_SIZE, "not supported\n"); -	return snprintf(buf, PAGE_SIZE, -			"0x%08x%08x%08x%08x%08x%08x%08x%08x\n", -			ap_configuration->adm[0], ap_configuration->adm[1], -			ap_configuration->adm[2], ap_configuration->adm[3], -			ap_configuration->adm[4], ap_configuration->adm[5], -			ap_configuration->adm[6], ap_configuration->adm[7]); +	return scnprintf(buf, PAGE_SIZE, +			 "0x%08x%08x%08x%08x%08x%08x%08x%08x\n", +			 ap_configuration->adm[0], ap_configuration->adm[1], +			 ap_configuration->adm[2], ap_configuration->adm[3], +			 ap_configuration->adm[4], ap_configuration->adm[5], +			 ap_configuration->adm[6], ap_configuration->adm[7]);  }  static BUS_ATTR_RO(ap_control_domain_mask); @@ -1062,14 +947,14 @@ static BUS_ATTR_RO(ap_control_domain_mask);  static ssize_t ap_usage_domain_mask_show(struct bus_type *bus, char *buf)  {  	if (!ap_configuration)	/* QCI not supported */ -		return snprintf(buf, PAGE_SIZE, "not supported\n"); +		return scnprintf(buf, PAGE_SIZE, "not supported\n"); -	return snprintf(buf, PAGE_SIZE, -			"0x%08x%08x%08x%08x%08x%08x%08x%08x\n", -			ap_configuration->aqm[0], ap_configuration->aqm[1], -			ap_configuration->aqm[2], ap_configuration->aqm[3], -			ap_configuration->aqm[4], ap_configuration->aqm[5], -			ap_configuration->aqm[6], ap_configuration->aqm[7]); +	return scnprintf(buf, PAGE_SIZE, +			 "0x%08x%08x%08x%08x%08x%08x%08x%08x\n", +			 ap_configuration->aqm[0], ap_configuration->aqm[1], +			 ap_configuration->aqm[2], ap_configuration->aqm[3], +			 ap_configuration->aqm[4], ap_configuration->aqm[5], +			 ap_configuration->aqm[6], ap_configuration->aqm[7]);  }  static BUS_ATTR_RO(ap_usage_domain_mask); @@ -1077,29 +962,29 @@ static BUS_ATTR_RO(ap_usage_domain_mask);  static ssize_t ap_adapter_mask_show(struct bus_type *bus, char *buf)  {  	if (!ap_configuration)	/* QCI not supported */ -		return snprintf(buf, PAGE_SIZE, "not supported\n"); +		return scnprintf(buf, PAGE_SIZE, "not supported\n"); -	return snprintf(buf, PAGE_SIZE, -			"0x%08x%08x%08x%08x%08x%08x%08x%08x\n", -			ap_configuration->apm[0], ap_configuration->apm[1], -			ap_configuration->apm[2], ap_configuration->apm[3], -			ap_configuration->apm[4], ap_configuration->apm[5], -			ap_configuration->apm[6], ap_configuration->apm[7]); +	return scnprintf(buf, PAGE_SIZE, +			 "0x%08x%08x%08x%08x%08x%08x%08x%08x\n", +			 ap_configuration->apm[0], ap_configuration->apm[1], +			 ap_configuration->apm[2], ap_configuration->apm[3], +			 ap_configuration->apm[4], ap_configuration->apm[5], +			 ap_configuration->apm[6], ap_configuration->apm[7]);  }  static BUS_ATTR_RO(ap_adapter_mask);  static ssize_t ap_interrupts_show(struct bus_type *bus, char *buf)  { -	return snprintf(buf, PAGE_SIZE, "%d\n", -			ap_using_interrupts() ? 1 : 0); +	return scnprintf(buf, PAGE_SIZE, "%d\n", +			 ap_using_interrupts() ? 1 : 0);  }  static BUS_ATTR_RO(ap_interrupts);  static ssize_t config_time_show(struct bus_type *bus, char *buf)  { -	return snprintf(buf, PAGE_SIZE, "%d\n", ap_config_time); +	return scnprintf(buf, PAGE_SIZE, "%d\n", ap_config_time);  }  static ssize_t config_time_store(struct bus_type *bus, @@ -1118,7 +1003,7 @@ static BUS_ATTR_RW(config_time);  static ssize_t poll_thread_show(struct bus_type *bus, char *buf)  { -	return snprintf(buf, PAGE_SIZE, "%d\n", ap_poll_kthread ? 1 : 0); +	return scnprintf(buf, PAGE_SIZE, "%d\n", ap_poll_kthread ? 1 : 0);  }  static ssize_t poll_thread_store(struct bus_type *bus, @@ -1141,7 +1026,7 @@ static BUS_ATTR_RW(poll_thread);  static ssize_t poll_timeout_show(struct bus_type *bus, char *buf)  { -	return snprintf(buf, PAGE_SIZE, "%llu\n", poll_timeout); +	return scnprintf(buf, PAGE_SIZE, "%llu\n", poll_timeout);  }  static ssize_t poll_timeout_store(struct bus_type *bus, const char *buf, @@ -1176,7 +1061,7 @@ static ssize_t ap_max_domain_id_show(struct bus_type *bus, char *buf)  		max_domain_id = ap_max_domain_id ? : -1;  	else  		max_domain_id = 15; -	return snprintf(buf, PAGE_SIZE, "%d\n", max_domain_id); +	return scnprintf(buf, PAGE_SIZE, "%d\n", max_domain_id);  }  static BUS_ATTR_RO(ap_max_domain_id); @@ -1187,10 +1072,10 @@ static ssize_t apmask_show(struct bus_type *bus, char *buf)  	if (mutex_lock_interruptible(&ap_perms_mutex))  		return -ERESTARTSYS; -	rc = snprintf(buf, PAGE_SIZE, -		      "0x%016lx%016lx%016lx%016lx\n", -		      ap_perms.apm[0], ap_perms.apm[1], -		      ap_perms.apm[2], ap_perms.apm[3]); +	rc = scnprintf(buf, PAGE_SIZE, +		       "0x%016lx%016lx%016lx%016lx\n", +		       ap_perms.apm[0], ap_perms.apm[1], +		       ap_perms.apm[2], ap_perms.apm[3]);  	mutex_unlock(&ap_perms_mutex);  	return rc; @@ -1218,10 +1103,10 @@ static ssize_t aqmask_show(struct bus_type *bus, char *buf)  	if (mutex_lock_interruptible(&ap_perms_mutex))  		return -ERESTARTSYS; -	rc = snprintf(buf, PAGE_SIZE, -		      "0x%016lx%016lx%016lx%016lx\n", -		      ap_perms.aqm[0], ap_perms.aqm[1], -		      ap_perms.aqm[2], ap_perms.aqm[3]); +	rc = scnprintf(buf, PAGE_SIZE, +		       "0x%016lx%016lx%016lx%016lx\n", +		       ap_perms.aqm[0], ap_perms.aqm[1], +		       ap_perms.aqm[2], ap_perms.aqm[3]);  	mutex_unlock(&ap_perms_mutex);  	return rc; @@ -1567,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);  } @@ -1641,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); @@ -1688,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); diff --git a/drivers/s390/crypto/ap_bus.h b/drivers/s390/crypto/ap_bus.h index 4348fdff1c61..8e8e37b6c0ee 100644 --- a/drivers/s390/crypto/ap_bus.h +++ b/drivers/s390/crypto/ap_bus.h @@ -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, diff --git a/drivers/s390/crypto/ap_card.c b/drivers/s390/crypto/ap_card.c index e85bfca1ed16..0a39dfdb6a1d 100644 --- a/drivers/s390/crypto/ap_card.c +++ b/drivers/s390/crypto/ap_card.c @@ -23,7 +23,7 @@ static ssize_t hwtype_show(struct device *dev,  {  	struct ap_card *ac = to_ap_card(dev); -	return snprintf(buf, PAGE_SIZE, "%d\n", ac->ap_dev.device_type); +	return scnprintf(buf, PAGE_SIZE, "%d\n", ac->ap_dev.device_type);  }  static DEVICE_ATTR_RO(hwtype); @@ -33,7 +33,7 @@ static ssize_t raw_hwtype_show(struct device *dev,  {  	struct ap_card *ac = to_ap_card(dev); -	return snprintf(buf, PAGE_SIZE, "%d\n", ac->raw_hwtype); +	return scnprintf(buf, PAGE_SIZE, "%d\n", ac->raw_hwtype);  }  static DEVICE_ATTR_RO(raw_hwtype); @@ -43,7 +43,7 @@ static ssize_t depth_show(struct device *dev, struct device_attribute *attr,  {  	struct ap_card *ac = to_ap_card(dev); -	return snprintf(buf, PAGE_SIZE, "%d\n", ac->queue_depth); +	return scnprintf(buf, PAGE_SIZE, "%d\n", ac->queue_depth);  }  static DEVICE_ATTR_RO(depth); @@ -53,7 +53,7 @@ static ssize_t ap_functions_show(struct device *dev,  {  	struct ap_card *ac = to_ap_card(dev); -	return snprintf(buf, PAGE_SIZE, "0x%08X\n", ac->functions); +	return scnprintf(buf, PAGE_SIZE, "0x%08X\n", ac->functions);  }  static DEVICE_ATTR_RO(ap_functions); @@ -69,7 +69,7 @@ static ssize_t request_count_show(struct device *dev,  	spin_lock_bh(&ap_list_lock);  	req_cnt = atomic64_read(&ac->total_request_count);  	spin_unlock_bh(&ap_list_lock); -	return snprintf(buf, PAGE_SIZE, "%llu\n", req_cnt); +	return scnprintf(buf, PAGE_SIZE, "%llu\n", req_cnt);  }  static ssize_t request_count_store(struct device *dev, @@ -102,7 +102,7 @@ static ssize_t requestq_count_show(struct device *dev,  	for_each_ap_queue(aq, ac)  		reqq_cnt += aq->requestq_count;  	spin_unlock_bh(&ap_list_lock); -	return snprintf(buf, PAGE_SIZE, "%d\n", reqq_cnt); +	return scnprintf(buf, PAGE_SIZE, "%d\n", reqq_cnt);  }  static DEVICE_ATTR_RO(requestq_count); @@ -119,7 +119,7 @@ static ssize_t pendingq_count_show(struct device *dev,  	for_each_ap_queue(aq, ac)  		penq_cnt += aq->pendingq_count;  	spin_unlock_bh(&ap_list_lock); -	return snprintf(buf, PAGE_SIZE, "%d\n", penq_cnt); +	return scnprintf(buf, PAGE_SIZE, "%d\n", penq_cnt);  }  static DEVICE_ATTR_RO(pendingq_count); @@ -127,7 +127,8 @@ static DEVICE_ATTR_RO(pendingq_count);  static ssize_t modalias_show(struct device *dev,  			     struct device_attribute *attr, char *buf)  { -	return sprintf(buf, "ap:t%02X\n", to_ap_dev(dev)->device_type); +	return scnprintf(buf, PAGE_SIZE, "ap:t%02X\n", +			 to_ap_dev(dev)->device_type);  }  static DEVICE_ATTR_RO(modalias); diff --git a/drivers/s390/crypto/ap_queue.c b/drivers/s390/crypto/ap_queue.c index a317ab484932..0eaf1d04e8df 100644 --- a/drivers/s390/crypto/ap_queue.c +++ b/drivers/s390/crypto/ap_queue.c @@ -152,7 +152,7 @@ static struct ap_queue_status ap_sm_recv(struct ap_queue *aq)  			ap_msg->receive(aq, ap_msg, aq->reply);  			break;  		} -		/* fall through */ +		fallthrough;  	case AP_RESPONSE_NO_PENDING_REPLY:  		if (!status.queue_empty || aq->queue_count <= 0)  			break; @@ -201,31 +201,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; -		/* fall through */ -	default: -		return AP_WAIT_NONE; -	} -} - -/**   * ap_sm_write(): Send messages from the request queue to an AP queue.   * @aq: pointer to the AP queue   * @@ -254,7 +229,7 @@ static enum ap_wait ap_sm_write(struct ap_queue *aq)  			aq->state = AP_STATE_WORKING;  			return AP_WAIT_AGAIN;  		} -		/* fall through */ +		fallthrough;  	case AP_RESPONSE_Q_FULL:  		aq->state = AP_STATE_QUEUE_FULL;  		return AP_WAIT_INTERRUPT; @@ -380,7 +355,7 @@ static enum ap_wait ap_sm_setirq_wait(struct ap_queue *aq)  	case AP_RESPONSE_NORMAL:  		if (aq->queue_count > 0)  			return AP_WAIT_AGAIN; -		/* fallthrough */ +		fallthrough;  	case AP_RESPONSE_NO_PENDING_REPLY:  		return AP_WAIT_TIMEOUT;  	default: @@ -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, @@ -450,28 +421,6 @@ enum ap_wait ap_sm_event_loop(struct ap_queue *aq, enum ap_event event)  }  /* - * 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.   */  static ssize_t request_count_show(struct device *dev, @@ -484,7 +433,7 @@ static ssize_t request_count_show(struct device *dev,  	spin_lock_bh(&aq->lock);  	req_cnt = aq->total_request_count;  	spin_unlock_bh(&aq->lock); -	return snprintf(buf, PAGE_SIZE, "%llu\n", req_cnt); +	return scnprintf(buf, PAGE_SIZE, "%llu\n", req_cnt);  }  static ssize_t request_count_store(struct device *dev, @@ -511,7 +460,7 @@ static ssize_t requestq_count_show(struct device *dev,  	spin_lock_bh(&aq->lock);  	reqq_cnt = aq->requestq_count;  	spin_unlock_bh(&aq->lock); -	return snprintf(buf, PAGE_SIZE, "%d\n", reqq_cnt); +	return scnprintf(buf, PAGE_SIZE, "%d\n", reqq_cnt);  }  static DEVICE_ATTR_RO(requestq_count); @@ -525,7 +474,7 @@ static ssize_t pendingq_count_show(struct device *dev,  	spin_lock_bh(&aq->lock);  	penq_cnt = aq->pendingq_count;  	spin_unlock_bh(&aq->lock); -	return snprintf(buf, PAGE_SIZE, "%d\n", penq_cnt); +	return scnprintf(buf, PAGE_SIZE, "%d\n", penq_cnt);  }  static DEVICE_ATTR_RO(pendingq_count); @@ -540,14 +489,14 @@ static ssize_t reset_show(struct device *dev,  	switch (aq->state) {  	case AP_STATE_RESET_START:  	case AP_STATE_RESET_WAIT: -		rc = snprintf(buf, PAGE_SIZE, "Reset in progress.\n"); +		rc = scnprintf(buf, PAGE_SIZE, "Reset in progress.\n");  		break;  	case AP_STATE_WORKING:  	case AP_STATE_QUEUE_FULL: -		rc = snprintf(buf, PAGE_SIZE, "Reset Timer armed.\n"); +		rc = scnprintf(buf, PAGE_SIZE, "Reset Timer armed.\n");  		break;  	default: -		rc = snprintf(buf, PAGE_SIZE, "No Reset Timer set.\n"); +		rc = scnprintf(buf, PAGE_SIZE, "No Reset Timer set.\n");  	}  	spin_unlock_bh(&aq->lock);  	return rc; @@ -581,11 +530,11 @@ static ssize_t interrupt_show(struct device *dev,  	spin_lock_bh(&aq->lock);  	if (aq->state == AP_STATE_SETIRQ_WAIT) -		rc = snprintf(buf, PAGE_SIZE, "Enable Interrupt pending.\n"); +		rc = scnprintf(buf, PAGE_SIZE, "Enable Interrupt pending.\n");  	else if (aq->interrupt == AP_INTR_ENABLED) -		rc = snprintf(buf, PAGE_SIZE, "Interrupts enabled.\n"); +		rc = scnprintf(buf, PAGE_SIZE, "Interrupts enabled.\n");  	else -		rc = snprintf(buf, PAGE_SIZE, "Interrupts disabled.\n"); +		rc = scnprintf(buf, PAGE_SIZE, "Interrupts disabled.\n");  	spin_unlock_bh(&aq->lock);  	return rc;  } diff --git a/drivers/s390/crypto/pkey_api.c b/drivers/s390/crypto/pkey_api.c index 2f33c5fcf676..74e63ec49068 100644 --- a/drivers/s390/crypto/pkey_api.c +++ b/drivers/s390/crypto/pkey_api.c @@ -80,7 +80,7 @@ struct clearaeskeytoken {  	u8  res1[3];  	u32 keytype;	 /* key type, one of the PKEY_KEYTYPE values */  	u32 len;	 /* bytes actually stored in clearkey[] */ -	u8  clearkey[0]; /* clear key value */ +	u8  clearkey[]; /* clear key value */  } __packed;  /* diff --git a/drivers/s390/crypto/vfio_ap_ops.c b/drivers/s390/crypto/vfio_ap_ops.c index 5c0f53c6dde7..e0bde8518745 100644 --- a/drivers/s390/crypto/vfio_ap_ops.c +++ b/drivers/s390/crypto/vfio_ap_ops.c @@ -90,7 +90,7 @@ static void vfio_ap_wait_for_irqclear(int apqn)  		case AP_RESPONSE_RESET_IN_PROGRESS:  			if (!status.irq_enabled)  				return; -			/* Fall through */ +			fallthrough;  		case AP_RESPONSE_BUSY:  			msleep(20);  			break; diff --git a/drivers/s390/crypto/zcrypt_card.c b/drivers/s390/crypto/zcrypt_card.c index d4f35a183c15..c53cab4b0c9e 100644 --- a/drivers/s390/crypto/zcrypt_card.c +++ b/drivers/s390/crypto/zcrypt_card.c @@ -41,7 +41,7 @@ static ssize_t type_show(struct device *dev,  {  	struct zcrypt_card *zc = to_ap_card(dev)->private; -	return snprintf(buf, PAGE_SIZE, "%s\n", zc->type_string); +	return scnprintf(buf, PAGE_SIZE, "%s\n", zc->type_string);  }  static DEVICE_ATTR_RO(type); @@ -52,7 +52,7 @@ static ssize_t online_show(struct device *dev,  {  	struct zcrypt_card *zc = to_ap_card(dev)->private; -	return snprintf(buf, PAGE_SIZE, "%d\n", zc->online); +	return scnprintf(buf, PAGE_SIZE, "%d\n", zc->online);  }  static ssize_t online_store(struct device *dev, @@ -86,7 +86,7 @@ static ssize_t load_show(struct device *dev,  {  	struct zcrypt_card *zc = to_ap_card(dev)->private; -	return snprintf(buf, PAGE_SIZE, "%d\n", atomic_read(&zc->load)); +	return scnprintf(buf, PAGE_SIZE, "%d\n", atomic_read(&zc->load));  }  static DEVICE_ATTR_RO(load); diff --git a/drivers/s390/crypto/zcrypt_ccamisc.c b/drivers/s390/crypto/zcrypt_ccamisc.c index 110fe9d0cb91..1b835398feec 100644 --- a/drivers/s390/crypto/zcrypt_ccamisc.c +++ b/drivers/s390/crypto/zcrypt_ccamisc.c @@ -592,7 +592,7 @@ int cca_sec2protkey(u16 cardnr, u16 domain,  				u8  pad2[1];  				u8  vptype;  				u8  vp[32];  /* verification pattern */ -			} keyblock; +			} ckb;  		} lv3;  	} __packed * prepparm; @@ -650,15 +650,16 @@ int cca_sec2protkey(u16 cardnr, u16 domain,  	prepparm = (struct uskrepparm *) prepcblk->rpl_parmb;  	/* check the returned keyblock */ -	if (prepparm->lv3.keyblock.version != 0x01) { -		DEBUG_ERR("%s reply param keyblock version mismatch 0x%02x != 0x01\n", -			  __func__, (int) prepparm->lv3.keyblock.version); +	if (prepparm->lv3.ckb.version != 0x01 && +	    prepparm->lv3.ckb.version != 0x02) { +		DEBUG_ERR("%s reply param keyblock version mismatch 0x%02x\n", +			  __func__, (int) prepparm->lv3.ckb.version);  		rc = -EIO;  		goto out;  	}  	/* copy the tanslated protected key */ -	switch (prepparm->lv3.keyblock.len) { +	switch (prepparm->lv3.ckb.len) {  	case 16+32:  		/* AES 128 protected key */  		if (protkeytype) @@ -676,13 +677,13 @@ int cca_sec2protkey(u16 cardnr, u16 domain,  		break;  	default:  		DEBUG_ERR("%s unknown/unsupported keylen %d\n", -			  __func__, prepparm->lv3.keyblock.len); +			  __func__, prepparm->lv3.ckb.len);  		rc = -EIO;  		goto out;  	} -	memcpy(protkey, prepparm->lv3.keyblock.key, prepparm->lv3.keyblock.len); +	memcpy(protkey, prepparm->lv3.ckb.key, prepparm->lv3.ckb.len);  	if (protkeylen) -		*protkeylen = prepparm->lv3.keyblock.len; +		*protkeylen = prepparm->lv3.ckb.len;  out:  	free_cprbmem(mem, PARMBSIZE, 0); @@ -1260,10 +1261,10 @@ int cca_cipher2protkey(u16 cardnr, u16 domain, const u8 *ckey,  	prepparm = (struct aurepparm *) prepcblk->rpl_parmb;  	/* check the returned keyblock */ -	if (prepparm->vud.ckb.version != 0x01) { -		DEBUG_ERR( -			"%s reply param keyblock version mismatch 0x%02x != 0x01\n", -			__func__, (int) prepparm->vud.ckb.version); +	if (prepparm->vud.ckb.version != 0x01 && +	    prepparm->vud.ckb.version != 0x02) { +		DEBUG_ERR("%s reply param keyblock version mismatch 0x%02x\n", +			  __func__, (int) prepparm->vud.ckb.version);  		rc = -EIO;  		goto out;  	} @@ -1568,9 +1569,9 @@ static int findcard(u64 mkvp, u16 *pcardnr, u16 *pdomain,  		return -EINVAL;  	/* fetch status of all crypto cards */ -	device_status = kmalloc_array(MAX_ZDEV_ENTRIES_EXT, -				      sizeof(struct zcrypt_device_status_ext), -				      GFP_KERNEL); +	device_status = kvmalloc_array(MAX_ZDEV_ENTRIES_EXT, +				       sizeof(struct zcrypt_device_status_ext), +				       GFP_KERNEL);  	if (!device_status)  		return -ENOMEM;  	zcrypt_device_status_mask_ext(device_status); @@ -1640,7 +1641,7 @@ static int findcard(u64 mkvp, u16 *pcardnr, u16 *pdomain,  	} else  		rc = -ENODEV; -	kfree(device_status); +	kvfree(device_status);  	return rc;  } diff --git a/drivers/s390/crypto/zcrypt_ccamisc.h b/drivers/s390/crypto/zcrypt_ccamisc.h index 3a9876d5ab0e..8b7a641671c9 100644 --- a/drivers/s390/crypto/zcrypt_ccamisc.h +++ b/drivers/s390/crypto/zcrypt_ccamisc.h @@ -90,7 +90,7 @@ struct cipherkeytoken {  	u16 kmf1;     /* key management field 1 */  	u16 kmf2;     /* key management field 2 */  	u16 kmf3;     /* key management field 3 */ -	u8  vdata[0]; /* variable part data follows */ +	u8  vdata[]; /* variable part data follows */  } __packed;  /* Some defines for the CCA AES cipherkeytoken kmf1 field */ diff --git a/drivers/s390/crypto/zcrypt_cex2a.c b/drivers/s390/crypto/zcrypt_cex2a.c index 7cbb384ec535..b447f3e9e4a2 100644 --- a/drivers/s390/crypto/zcrypt_cex2a.c +++ b/drivers/s390/crypto/zcrypt_cex2a.c @@ -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,  }; diff --git a/drivers/s390/crypto/zcrypt_cex2c.c b/drivers/s390/crypto/zcrypt_cex2c.c index c78c0d119806..266440168bb7 100644 --- a/drivers/s390/crypto/zcrypt_cex2c.c +++ b/drivers/s390/crypto/zcrypt_cex2c.c @@ -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,  }; diff --git a/drivers/s390/crypto/zcrypt_cex4.c b/drivers/s390/crypto/zcrypt_cex4.c index 9a9d02e19774..cdaa8348ad04 100644 --- a/drivers/s390/crypto/zcrypt_cex4.c +++ b/drivers/s390/crypto/zcrypt_cex4.c @@ -87,7 +87,7 @@ static ssize_t cca_serialnr_show(struct device *dev,  	if (ap_domain_index >= 0)  		cca_get_info(ac->id, ap_domain_index, &ci, zc->online); -	return snprintf(buf, PAGE_SIZE, "%s\n", ci.serial); +	return scnprintf(buf, PAGE_SIZE, "%s\n", ci.serial);  }  static struct device_attribute dev_attr_cca_serialnr = @@ -122,22 +122,24 @@ static ssize_t cca_mkvps_show(struct device *dev,  		     &ci, zq->online);  	if (ci.new_mk_state >= '1' && ci.new_mk_state <= '3') -		n = snprintf(buf, PAGE_SIZE, "AES NEW: %s 0x%016llx\n", -			     new_state[ci.new_mk_state - '1'], ci.new_mkvp); +		n = scnprintf(buf, PAGE_SIZE, "AES NEW: %s 0x%016llx\n", +			      new_state[ci.new_mk_state - '1'], ci.new_mkvp);  	else -		n = snprintf(buf, PAGE_SIZE, "AES NEW: - -\n"); +		n = scnprintf(buf, PAGE_SIZE, "AES NEW: - -\n");  	if (ci.cur_mk_state >= '1' && ci.cur_mk_state <= '2') -		n += snprintf(buf + n, PAGE_SIZE - n, "AES CUR: %s 0x%016llx\n", -			      cao_state[ci.cur_mk_state - '1'], ci.cur_mkvp); +		n += scnprintf(buf + n, PAGE_SIZE - n, +			       "AES CUR: %s 0x%016llx\n", +			       cao_state[ci.cur_mk_state - '1'], ci.cur_mkvp);  	else -		n += snprintf(buf + n, PAGE_SIZE - n, "AES CUR: - -\n"); +		n += scnprintf(buf + n, PAGE_SIZE - n, "AES CUR: - -\n");  	if (ci.old_mk_state >= '1' && ci.old_mk_state <= '2') -		n += snprintf(buf + n, PAGE_SIZE - n, "AES OLD: %s 0x%016llx\n", -			      cao_state[ci.old_mk_state - '1'], ci.old_mkvp); +		n += scnprintf(buf + n, PAGE_SIZE - n, +			       "AES OLD: %s 0x%016llx\n", +			       cao_state[ci.old_mk_state - '1'], ci.old_mkvp);  	else -		n += snprintf(buf + n, PAGE_SIZE - n, "AES OLD: - -\n"); +		n += scnprintf(buf + n, PAGE_SIZE - n, "AES OLD: - -\n");  	return n;  } @@ -170,9 +172,9 @@ static ssize_t ep11_api_ordinalnr_show(struct device *dev,  	ep11_get_card_info(ac->id, &ci, zc->online);  	if (ci.API_ord_nr > 0) -		return snprintf(buf, PAGE_SIZE, "%u\n", ci.API_ord_nr); +		return scnprintf(buf, PAGE_SIZE, "%u\n", ci.API_ord_nr);  	else -		return snprintf(buf, PAGE_SIZE, "\n"); +		return scnprintf(buf, PAGE_SIZE, "\n");  }  static struct device_attribute dev_attr_ep11_api_ordinalnr = @@ -191,11 +193,11 @@ static ssize_t ep11_fw_version_show(struct device *dev,  	ep11_get_card_info(ac->id, &ci, zc->online);  	if (ci.FW_version > 0) -		return snprintf(buf, PAGE_SIZE, "%d.%d\n", -				(int)(ci.FW_version >> 8), -				(int)(ci.FW_version & 0xFF)); +		return scnprintf(buf, PAGE_SIZE, "%d.%d\n", +				 (int)(ci.FW_version >> 8), +				 (int)(ci.FW_version & 0xFF));  	else -		return snprintf(buf, PAGE_SIZE, "\n"); +		return scnprintf(buf, PAGE_SIZE, "\n");  }  static struct device_attribute dev_attr_ep11_fw_version = @@ -214,9 +216,9 @@ static ssize_t ep11_serialnr_show(struct device *dev,  	ep11_get_card_info(ac->id, &ci, zc->online);  	if (ci.serial[0]) -		return snprintf(buf, PAGE_SIZE, "%16.16s\n", ci.serial); +		return scnprintf(buf, PAGE_SIZE, "%16.16s\n", ci.serial);  	else -		return snprintf(buf, PAGE_SIZE, "\n"); +		return scnprintf(buf, PAGE_SIZE, "\n");  }  static struct device_attribute dev_attr_ep11_serialnr = @@ -251,11 +253,11 @@ static ssize_t ep11_card_op_modes_show(struct device *dev,  		if (ci.op_mode & (1 << ep11_op_modes[i].mode_bit)) {  			if (n > 0)  				buf[n++] = ' '; -			n += snprintf(buf + n, PAGE_SIZE - n, -				      "%s", ep11_op_modes[i].mode_txt); +			n += scnprintf(buf + n, PAGE_SIZE - n, +				       "%s", ep11_op_modes[i].mode_txt);  		}  	} -	n += snprintf(buf + n, PAGE_SIZE - n, "\n"); +	n += scnprintf(buf + n, PAGE_SIZE - n, "\n");  	return n;  } @@ -298,28 +300,28 @@ static ssize_t ep11_mkvps_show(struct device *dev,  				     &di);  	if (di.cur_wk_state == '0') { -		n = snprintf(buf, PAGE_SIZE, "WK CUR: %s -\n", -			     cwk_state[di.cur_wk_state - '0']); +		n = scnprintf(buf, PAGE_SIZE, "WK CUR: %s -\n", +			      cwk_state[di.cur_wk_state - '0']);  	} else if (di.cur_wk_state == '1') { -		n = snprintf(buf, PAGE_SIZE, "WK CUR: %s 0x", -			     cwk_state[di.cur_wk_state - '0']); +		n = scnprintf(buf, PAGE_SIZE, "WK CUR: %s 0x", +			      cwk_state[di.cur_wk_state - '0']);  		bin2hex(buf + n, di.cur_wkvp, sizeof(di.cur_wkvp));  		n += 2 * sizeof(di.cur_wkvp); -		n += snprintf(buf + n, PAGE_SIZE - n, "\n"); +		n += scnprintf(buf + n, PAGE_SIZE - n, "\n");  	} else -		n = snprintf(buf, PAGE_SIZE, "WK CUR: - -\n"); +		n = scnprintf(buf, PAGE_SIZE, "WK CUR: - -\n");  	if (di.new_wk_state == '0') { -		n += snprintf(buf + n, PAGE_SIZE - n, "WK NEW: %s -\n", -			      nwk_state[di.new_wk_state - '0']); +		n += scnprintf(buf + n, PAGE_SIZE - n, "WK NEW: %s -\n", +			       nwk_state[di.new_wk_state - '0']);  	} else if (di.new_wk_state >= '1' && di.new_wk_state <= '2') { -		n += snprintf(buf + n, PAGE_SIZE - n, "WK NEW: %s 0x", -			      nwk_state[di.new_wk_state - '0']); +		n += scnprintf(buf + n, PAGE_SIZE - n, "WK NEW: %s 0x", +			       nwk_state[di.new_wk_state - '0']);  		bin2hex(buf + n, di.new_wkvp, sizeof(di.new_wkvp));  		n += 2 * sizeof(di.new_wkvp); -		n += snprintf(buf + n, PAGE_SIZE - n, "\n"); +		n += scnprintf(buf + n, PAGE_SIZE - n, "\n");  	} else -		n += snprintf(buf + n, PAGE_SIZE - n, "WK NEW: - -\n"); +		n += scnprintf(buf + n, PAGE_SIZE - n, "WK NEW: - -\n");  	return n;  } @@ -346,11 +348,11 @@ static ssize_t ep11_queue_op_modes_show(struct device *dev,  		if (di.op_mode & (1 << ep11_op_modes[i].mode_bit)) {  			if (n > 0)  				buf[n++] = ' '; -			n += snprintf(buf + n, PAGE_SIZE - n, -				      "%s", ep11_op_modes[i].mode_txt); +			n += scnprintf(buf + n, PAGE_SIZE - n, +				       "%s", ep11_op_modes[i].mode_txt);  		}  	} -	n += snprintf(buf + n, PAGE_SIZE - n, "\n"); +	n += scnprintf(buf + n, PAGE_SIZE - n, "\n");  	return n;  } @@ -654,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,  }; diff --git a/drivers/s390/crypto/zcrypt_ep11misc.c b/drivers/s390/crypto/zcrypt_ep11misc.c index 2afe2153b34e..004ce022fc78 100644 --- a/drivers/s390/crypto/zcrypt_ep11misc.c +++ b/drivers/s390/crypto/zcrypt_ep11misc.c @@ -1217,9 +1217,9 @@ int ep11_findcard2(u32 **apqns, u32 *nr_apqns, u16 cardnr, u16 domain,  	struct ep11_card_info eci;  	/* fetch status of all crypto cards */ -	device_status = kmalloc_array(MAX_ZDEV_ENTRIES_EXT, -				      sizeof(struct zcrypt_device_status_ext), -				      GFP_KERNEL); +	device_status = kvmalloc_array(MAX_ZDEV_ENTRIES_EXT, +				       sizeof(struct zcrypt_device_status_ext), +				       GFP_KERNEL);  	if (!device_status)  		return -ENOMEM;  	zcrypt_device_status_mask_ext(device_status); @@ -1227,7 +1227,7 @@ int ep11_findcard2(u32 **apqns, u32 *nr_apqns, u16 cardnr, u16 domain,  	/* allocate 1k space for up to 256 apqns */  	_apqns = kmalloc_array(256, sizeof(u32), GFP_KERNEL);  	if (!_apqns) { -		kfree(device_status); +		kvfree(device_status);  		return -ENOMEM;  	} @@ -1282,7 +1282,7 @@ int ep11_findcard2(u32 **apqns, u32 *nr_apqns, u16 cardnr, u16 domain,  		rc = 0;  	} -	kfree(device_status); +	kvfree(device_status);  	return rc;  }  EXPORT_SYMBOL(ep11_findcard2); diff --git a/drivers/s390/crypto/zcrypt_msgtype6.c b/drivers/s390/crypto/zcrypt_msgtype6.c index a36251d138fb..fd1cbb2d6b3f 100644 --- a/drivers/s390/crypto/zcrypt_msgtype6.c +++ b/drivers/s390/crypto/zcrypt_msgtype6.c @@ -590,7 +590,7 @@ struct type86x_reply {  	struct CPRBX cprbx;  	unsigned char pad[4];	/* 4 byte function code/rules block ? */  	unsigned short length; -	char text[0]; +	char text[];  } __packed;  struct type86_ep11_reply { @@ -801,7 +801,7 @@ static int convert_response_ica(struct zcrypt_queue *zq,  		if (msg->cprbx.cprb_ver_id == 0x02)  			return convert_type86_ica(zq, reply,  						  outputdata, outputdatalength); -		/* fall through - wrong cprb version is an unknown response */ +		fallthrough;	/* wrong cprb version is an unknown response */  	default: /* Unknown response type, this should NEVER EVER happen */  		zq->online = 0;  		pr_err("Cryptographic device %02x.%04x failed and was set offline\n", @@ -834,7 +834,7 @@ static int convert_response_xcrb(struct zcrypt_queue *zq,  		}  		if (msg->cprbx.cprb_ver_id == 0x02)  			return convert_type86_xcrb(zq, reply, xcRB); -		/* fall through - wrong cprb version is an unknown response */ +		fallthrough;	/* wrong cprb version is an unknown response */  	default: /* Unknown response type, this should NEVER EVER happen */  		xcRB->status = 0x0008044DL; /* HDD_InvalidParm */  		zq->online = 0; @@ -864,7 +864,7 @@ static int convert_response_ep11_xcrb(struct zcrypt_queue *zq,  			return convert_error(zq, reply);  		if (msg->cprbx.cprb_ver_id == 0x04)  			return convert_type86_ep11_xcrb(zq, reply, xcRB); -		/* fall through - wrong cprb version is an unknown resp */ +		fallthrough;	/* wrong cprb version is an unknown resp */  	default: /* Unknown response type, this should NEVER EVER happen */  		zq->online = 0;  		pr_err("Cryptographic device %02x.%04x failed and was set offline\n", @@ -894,7 +894,7 @@ static int convert_response_rng(struct zcrypt_queue *zq,  			return -EINVAL;  		if (msg->cprbx.cprb_ver_id == 0x02)  			return convert_type86_rng(zq, reply, data); -		/* fall through - wrong cprb version is an unknown response */ +		fallthrough;	/* wrong cprb version is an unknown response */  	default: /* Unknown response type, this should NEVER EVER happen */  		zq->online = 0;  		pr_err("Cryptographic device %02x.%04x failed and was set offline\n", diff --git a/drivers/s390/crypto/zcrypt_queue.c b/drivers/s390/crypto/zcrypt_queue.c index 522c4bc69a08..b7d9fa567880 100644 --- a/drivers/s390/crypto/zcrypt_queue.c +++ b/drivers/s390/crypto/zcrypt_queue.c @@ -42,7 +42,7 @@ static ssize_t online_show(struct device *dev,  {  	struct zcrypt_queue *zq = to_ap_queue(dev)->private; -	return snprintf(buf, PAGE_SIZE, "%d\n", zq->online); +	return scnprintf(buf, PAGE_SIZE, "%d\n", zq->online);  }  static ssize_t online_store(struct device *dev, @@ -78,7 +78,7 @@ static ssize_t load_show(struct device *dev,  {  	struct zcrypt_queue *zq = to_ap_queue(dev)->private; -	return snprintf(buf, PAGE_SIZE, "%d\n", atomic_read(&zq->load)); +	return scnprintf(buf, PAGE_SIZE, "%d\n", atomic_read(&zq->load));  }  static DEVICE_ATTR_RO(load); diff --git a/drivers/s390/net/ism_drv.c b/drivers/s390/net/ism_drv.c index 4fc2056bd227..c75112ee7b97 100644 --- a/drivers/s390/net/ism_drv.c +++ b/drivers/s390/net/ism_drv.c @@ -567,31 +567,11 @@ static void ism_remove(struct pci_dev *pdev)  	kfree(ism);  } -static int ism_suspend(struct device *dev) -{ -	struct ism_dev *ism = dev_get_drvdata(dev); - -	ism_dev_exit(ism); -	return 0; -} - -static int ism_resume(struct device *dev) -{ -	struct ism_dev *ism = dev_get_drvdata(dev); - -	return ism_dev_init(ism); -} - -static SIMPLE_DEV_PM_OPS(ism_pm_ops, ism_suspend, ism_resume); -  static struct pci_driver ism_driver = {  	.name	  = DRV_NAME,  	.id_table = ism_device_table,  	.probe	  = ism_probe,  	.remove	  = ism_remove, -	.driver	  = { -		.pm = &ism_pm_ops, -	},  };  static int __init ism_init(void) |