// SPDX-License-Identifier: GPL-2.0 /* * Deliver z/VM CP special messages (SMSG) as uevents. * * The driver registers for z/VM CP special messages with the * "APP" prefix. Incoming messages are delivered to user space * as uevents. * * Copyright IBM Corp. 2010 * Author(s): Hendrik Brueckner <brueckner@linux.vnet.ibm.com> *
*/ #define KMSG_COMPONENT "smsgiucv_app" #define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
/* z/VM user ID which is permitted to send SMSGs * If the value is undefined or empty (""), special messages are
* accepted from any z/VM user ID. */ staticchar *sender;
module_param(sender, charp, 0400);
MODULE_PARM_DESC(sender, "z/VM user ID from which CP SMSGs are accepted");
/* check if the originating z/VM user ID matches
* the configured sender. */ if (sender && strlen(sender) > 0 && strcmp(from, sender) != 0) return;
/* get start of message text (skip prefix and leading blanks) */
msg += strlen(SMSG_PREFIX); while (*msg && isspace(*msg))
msg++; if (*msg == '\0') return;
/* allocate event list element and its environment */
se = smsg_app_event_alloc(from, msg); if (!se) return;
/* queue event and schedule work function */
spin_lock(&smsg_event_queue_lock);
list_add_tail(&se->list, &smsg_event_queue);
spin_unlock(&smsg_event_queue_lock);
schedule_work(&smsg_event_work); return;
}
staticint __init smsgiucv_app_init(void)
{ struct device_driver *smsgiucv_drv; int rc;
if (!machine_is_vm()) return -ENODEV;
smsgiucv_drv = driver_find(SMSGIUCV_DRV_NAME, &iucv_bus); if (!smsgiucv_drv) return -ENODEV;
smsg_app_dev = iucv_alloc_device(NULL, smsgiucv_drv, NULL, KMSG_COMPONENT); if (!smsg_app_dev) return -ENOMEM;
rc = device_register(smsg_app_dev); if (rc) {
put_device(smsg_app_dev); goto fail;
}
/* convert sender to uppercase characters */ if (sender) { int len = strlen(sender); while (len--)
sender[len] = toupper(sender[len]);
}
/* register with the smsgiucv device driver */
rc = smsg_register_callback(SMSG_PREFIX, smsg_app_callback); if (rc) {
device_unregister(smsg_app_dev); goto fail;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.