]> git.baikalelectronics.ru Git - kernel.git/commitdiff
s390/ap: extend AP change bindings-complete uevent with counter
authorHarald Freudenberger <freude@linux.ibm.com>
Tue, 11 May 2021 13:01:18 +0000 (15:01 +0200)
committerVasily Gorbik <gor@linux.ibm.com>
Mon, 7 Jun 2021 15:07:00 +0000 (17:07 +0200)
Userspace udev rules need an indication about the very first AP change
BINDINGS=complete uevent.

So now this uevent is extend with an additional key-value entry
COMPLETECOUNT=<counter>. The very first uevent will show counter=1 and
the following BINDINGS=complete uevents increase this counter by 1.

Here is an example how the very first BINDINGS=complete uevent
looks like:

  KERNEL[106.079510] change   /devices/ap (ap)
  ACTION=change
  DEVPATH=/devices/ap
  SUBSYSTEM=ap
  BINDINGS=complete
  COMPLETECOUNT=1
  SEQNUM=10686

Signed-off-by: Harald Freudenberger <freude@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
drivers/s390/crypto/ap_bus.c

index 868ff02e92e7326d4ec88d02aa2737eab69fafdf..0f088e335397f0d66f4a909cbdfa180da953e9b4 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0+
 /*
- * Copyright IBM Corp. 2006, 2020
+ * Copyright IBM Corp. 2006, 2021
  * Author(s): Cornelia Huck <cornelia.huck@de.ibm.com>
  *           Martin Schwidefsky <schwidefsky@de.ibm.com>
  *           Ralph Wuerthner <rwuerthn@de.ibm.com>
@@ -77,6 +77,9 @@ EXPORT_SYMBOL(ap_perms_mutex);
 /* # of bus scans since init */
 static atomic64_t ap_scan_bus_count;
 
+/* # of bindings complete since init */
+static atomic64_t ap_bindings_complete_count = ATOMIC64_INIT(0);
+
 /* completion for initial APQN bindings complete */
 static DECLARE_COMPLETION(ap_init_apqn_bindings_complete);
 
@@ -613,8 +616,11 @@ static void ap_send_init_scan_done_uevent(void)
 
 static void ap_send_bindings_complete_uevent(void)
 {
-       char *envp[] = { "BINDINGS=complete", NULL };
+       char buf[32];
+       char *envp[] = { "BINDINGS=complete", buf, NULL };
 
+       snprintf(buf, sizeof(buf), "COMPLETECOUNT=%llu",
+                atomic64_inc_return(&ap_bindings_complete_count));
        kobject_uevent_env(&ap_root_device->kobj, KOBJ_CHANGE, envp);
 }