Lines Matching +full:8 +full:- +full:cpu

1 // SPDX-License-Identifier: GPL-2.0-or-later
20 * CP Programming Service, IBM document # SC24-5760
38 #include <linux/cpu.h>
51 * IPSRCCLS - Indicates you have specified a source class.
52 * IPTRGCLS - Indicates you have specified a target class.
53 * IPFGPID - Indicates you have specified a pathid.
54 * IPFGMID - Indicates you have specified a message ID.
55 * IPNORPY - Indicates a one-way message. No reply expected.
56 * IPALL - Indicates that all paths are affected.
86 u32 res2[8];
133 IUCV_REJECT = 8,
170 * iucv_active_cpu: contains the number of the cpu executing the tasklet
173 static int iucv_active_cpu = -1;
181 * Counter for number of non-smp capable handlers.
195 u8 ipvmid[8];
197 u8 iptarget[8];
198 } __attribute__ ((packed,aligned(8)));
210 u8 iprmmsg[8];
216 } __attribute__ ((packed,aligned(8)));
236 } __attribute__ ((packed,aligned(8)));
252 } __attribute__ ((packed,aligned(8)));
262 } __attribute__ ((packed,aligned(8)));
273 * Anchor for per-cpu IUCV command parameter block.
309 return ccode == 1 ? parm->ctrl.iprcode : ccode; in iucv_call_b2f0()
317 * Returns the maximum number of connections or -EPERM is IUCV is not
345 return -ENOMEM; in iucv_query_maxconn()
350 return ccode ? -EPERM : 0; in iucv_query_maxconn()
357 * Allow iucv interrupts on this cpu.
361 int cpu = smp_processor_id(); in iucv_allow_cpu() local
367 * 0x80 - Flag to allow nonpriority message pending interrupts in iucv_allow_cpu()
368 * 0x40 - Flag to allow priority message pending interrupts in iucv_allow_cpu()
369 * 0x20 - Flag to allow nonpriority message completion interrupts in iucv_allow_cpu()
370 * 0x10 - Flag to allow priority message completion interrupts in iucv_allow_cpu()
371 * 0x08 - Flag to allow IUCV control interrupts in iucv_allow_cpu()
373 parm = iucv_param_irq[cpu]; in iucv_allow_cpu()
375 parm->set_mask.ipmask = 0xf8; in iucv_allow_cpu()
381 * 0x80 - Flag to allow pending connections interrupts in iucv_allow_cpu()
382 * 0x40 - Flag to allow connection complete interrupts in iucv_allow_cpu()
383 * 0x20 - Flag to allow connection severed interrupts in iucv_allow_cpu()
384 * 0x10 - Flag to allow connection quiesced interrupts in iucv_allow_cpu()
385 * 0x08 - Flag to allow connection resumed interrupts in iucv_allow_cpu()
388 parm->set_mask.ipmask = 0xf8; in iucv_allow_cpu()
390 /* Set indication that iucv interrupts are allowed for this cpu. */ in iucv_allow_cpu()
391 cpumask_set_cpu(cpu, &iucv_irq_cpumask); in iucv_allow_cpu()
398 * Block iucv interrupts on this cpu.
402 int cpu = smp_processor_id(); in iucv_block_cpu() local
406 parm = iucv_param_irq[cpu]; in iucv_block_cpu()
410 /* Clear indication that iucv interrupts are allowed for this cpu. */ in iucv_block_cpu()
411 cpumask_clear_cpu(cpu, &iucv_irq_cpumask); in iucv_block_cpu()
418 * Declare a interrupt buffer on this cpu.
422 int cpu = smp_processor_id(); in iucv_declare_cpu() local
426 if (cpumask_test_cpu(cpu, &iucv_buffer_cpumask)) in iucv_declare_cpu()
430 parm = iucv_param_irq[cpu]; in iucv_declare_cpu()
432 parm->db.ipbfadr1 = virt_to_phys(iucv_irq_data[cpu]); in iucv_declare_cpu()
453 pr_warn("Defining an interrupt buffer on CPU %i failed with 0x%02x (%s)\n", in iucv_declare_cpu()
454 cpu, rc, err); in iucv_declare_cpu()
458 /* Set indication that an iucv buffer exists for this cpu. */ in iucv_declare_cpu()
459 cpumask_set_cpu(cpu, &iucv_buffer_cpumask); in iucv_declare_cpu()
462 /* Enable iucv interrupts on this cpu. */ in iucv_declare_cpu()
465 /* Disable iucv interrupts on this cpu. */ in iucv_declare_cpu()
473 * Retrieve interrupt buffer on this cpu.
477 int cpu = smp_processor_id(); in iucv_retrieve_cpu() local
480 if (!cpumask_test_cpu(cpu, &iucv_buffer_cpumask)) in iucv_retrieve_cpu()
487 parm = iucv_param_irq[cpu]; in iucv_retrieve_cpu()
490 /* Clear indication that an iucv buffer exists for this cpu. */ in iucv_retrieve_cpu()
491 cpumask_clear_cpu(cpu, &iucv_buffer_cpumask); in iucv_retrieve_cpu()
501 int cpu; in iucv_setmask_mp() local
504 for_each_online_cpu(cpu) in iucv_setmask_mp()
506 if (cpumask_test_cpu(cpu, &iucv_buffer_cpumask) && in iucv_setmask_mp()
507 !cpumask_test_cpu(cpu, &iucv_irq_cpumask)) in iucv_setmask_mp()
508 smp_call_function_single(cpu, iucv_allow_cpu, in iucv_setmask_mp()
516 * Allow iucv interrupts on a single cpu.
521 int cpu; in iucv_setmask_up() local
523 /* Disable all cpu but the first in cpu_irq_cpumask. */ in iucv_setmask_up()
526 for_each_cpu(cpu, &cpumask) in iucv_setmask_up()
527 smp_call_function_single(cpu, iucv_block_cpu, NULL, 1); in iucv_setmask_up()
541 int cpu, rc; in iucv_enable() local
544 rc = -ENOMEM; in iucv_enable()
549 /* Declare per cpu buffers. */ in iucv_enable()
550 rc = -EIO; in iucv_enable()
551 for_each_online_cpu(cpu) in iucv_enable()
552 smp_call_function_single(cpu, iucv_declare_cpu, NULL, 1); in iucv_enable()
554 /* No cpu could declare an iucv buffer. */ in iucv_enable()
581 static int iucv_cpu_dead(unsigned int cpu) in iucv_cpu_dead() argument
583 kfree(iucv_param_irq[cpu]); in iucv_cpu_dead()
584 iucv_param_irq[cpu] = NULL; in iucv_cpu_dead()
585 kfree(iucv_param[cpu]); in iucv_cpu_dead()
586 iucv_param[cpu] = NULL; in iucv_cpu_dead()
587 kfree(iucv_irq_data[cpu]); in iucv_cpu_dead()
588 iucv_irq_data[cpu] = NULL; in iucv_cpu_dead()
592 static int iucv_cpu_prepare(unsigned int cpu) in iucv_cpu_prepare() argument
595 iucv_irq_data[cpu] = kmalloc_node(sizeof(struct iucv_irq_data), in iucv_cpu_prepare()
596 GFP_KERNEL|GFP_DMA, cpu_to_node(cpu)); in iucv_cpu_prepare()
597 if (!iucv_irq_data[cpu]) in iucv_cpu_prepare()
601 iucv_param[cpu] = kmalloc_node(sizeof(union iucv_param), in iucv_cpu_prepare()
602 GFP_KERNEL|GFP_DMA, cpu_to_node(cpu)); in iucv_cpu_prepare()
603 if (!iucv_param[cpu]) in iucv_cpu_prepare()
606 iucv_param_irq[cpu] = kmalloc_node(sizeof(union iucv_param), in iucv_cpu_prepare()
607 GFP_KERNEL|GFP_DMA, cpu_to_node(cpu)); in iucv_cpu_prepare()
608 if (!iucv_param_irq[cpu]) in iucv_cpu_prepare()
614 iucv_cpu_dead(cpu); in iucv_cpu_prepare()
615 return -ENOMEM; in iucv_cpu_prepare()
618 static int iucv_cpu_online(unsigned int cpu) in iucv_cpu_online() argument
626 static int iucv_cpu_down_prep(unsigned int cpu) in iucv_cpu_down_prep() argument
634 cpumask_clear_cpu(cpu, &cpumask); in iucv_cpu_down_prep()
636 /* Can't offline last IUCV enabled cpu. */ in iucv_cpu_down_prep()
637 return -EINVAL; in iucv_cpu_down_prep()
650 * @userdata: 16-bytes of user data.
661 memcpy(parm->ctrl.ipuser, userdata, sizeof(parm->ctrl.ipuser)); in iucv_sever_pathid()
662 parm->ctrl.ippathid = pathid; in iucv_sever_pathid()
701 if (iucv_path_table[p->data.ippathid] == NULL) { in iucv_cleanup_queue()
702 list_del(&p->list); in iucv_cleanup_queue()
716 * Returns 0 on success, -ENOMEM if the memory allocation for the pathid
717 * table failed, or -EIO if IUCV_DECLARE_BUFFER failed on all cpus.
724 return -ENOSYS; in iucv_register()
734 INIT_LIST_HEAD(&handler->paths); in iucv_register()
737 list_add_tail(&handler->list, &iucv_handler_list); in iucv_register()
760 list_del_init(&handler->list); in iucv_unregister()
762 list_for_each_entry_safe(p, n, &handler->paths, list) { in iucv_unregister()
763 iucv_sever_pathid(p->pathid, NULL); in iucv_unregister()
764 iucv_path_table[p->pathid] = NULL; in iucv_unregister()
765 list_del(&p->list); in iucv_unregister()
770 iucv_nonsmp_handler--; in iucv_unregister()
824 rc = -EIO; in iucv_path_accept()
830 parm->ctrl.ippathid = path->pathid; in iucv_path_accept()
831 parm->ctrl.ipmsglim = path->msglim; in iucv_path_accept()
833 memcpy(parm->ctrl.ipuser, userdata, sizeof(parm->ctrl.ipuser)); in iucv_path_accept()
834 parm->ctrl.ipflags1 = path->flags; in iucv_path_accept()
838 path->private = private; in iucv_path_accept()
839 path->msglim = parm->ctrl.ipmsglim; in iucv_path_accept()
840 path->flags = parm->ctrl.ipflags1; in iucv_path_accept()
852 * @userid: 8-byte user identification
853 * @system: 8-byte target system identification
873 rc = -EIO; in iucv_path_connect()
878 parm->ctrl.ipmsglim = path->msglim; in iucv_path_connect()
879 parm->ctrl.ipflags1 = path->flags; in iucv_path_connect()
881 memcpy(parm->ctrl.ipvmid, userid, sizeof(parm->ctrl.ipvmid)); in iucv_path_connect()
882 ASCEBC(parm->ctrl.ipvmid, sizeof(parm->ctrl.ipvmid)); in iucv_path_connect()
883 EBC_TOUPPER(parm->ctrl.ipvmid, sizeof(parm->ctrl.ipvmid)); in iucv_path_connect()
886 memcpy(parm->ctrl.iptarget, system, in iucv_path_connect()
887 sizeof(parm->ctrl.iptarget)); in iucv_path_connect()
888 ASCEBC(parm->ctrl.iptarget, sizeof(parm->ctrl.iptarget)); in iucv_path_connect()
889 EBC_TOUPPER(parm->ctrl.iptarget, sizeof(parm->ctrl.iptarget)); in iucv_path_connect()
892 memcpy(parm->ctrl.ipuser, userdata, sizeof(parm->ctrl.ipuser)); in iucv_path_connect()
896 if (parm->ctrl.ippathid < iucv_max_pathid) { in iucv_path_connect()
897 path->pathid = parm->ctrl.ippathid; in iucv_path_connect()
898 path->msglim = parm->ctrl.ipmsglim; in iucv_path_connect()
899 path->flags = parm->ctrl.ipflags1; in iucv_path_connect()
900 path->handler = handler; in iucv_path_connect()
901 path->private = private; in iucv_path_connect()
902 list_add_tail(&path->list, &handler->paths); in iucv_path_connect()
903 iucv_path_table[path->pathid] = path; in iucv_path_connect()
905 iucv_sever_pathid(parm->ctrl.ippathid, in iucv_path_connect()
907 rc = -EIO; in iucv_path_connect()
933 rc = -EIO; in iucv_path_quiesce()
939 memcpy(parm->ctrl.ipuser, userdata, sizeof(parm->ctrl.ipuser)); in iucv_path_quiesce()
940 parm->ctrl.ippathid = path->pathid; in iucv_path_quiesce()
965 rc = -EIO; in iucv_path_resume()
971 memcpy(parm->ctrl.ipuser, userdata, sizeof(parm->ctrl.ipuser)); in iucv_path_resume()
972 parm->ctrl.ippathid = path->pathid; in iucv_path_resume()
994 rc = -EIO; in iucv_path_sever()
999 rc = iucv_sever_pathid(path->pathid, userdata); in iucv_path_sever()
1000 iucv_path_table[path->pathid] = NULL; in iucv_path_sever()
1001 list_del_init(&path->list); in iucv_path_sever()
1028 rc = -EIO; in iucv_message_purge()
1033 parm->purge.ippathid = path->pathid; in iucv_message_purge()
1034 parm->purge.ipmsgid = msg->id; in iucv_message_purge()
1035 parm->purge.ipsrccls = srccls; in iucv_message_purge()
1036 parm->purge.ipflags1 = IUCV_IPSRCCLS | IUCV_IPFGMID | IUCV_IPFGPID; in iucv_message_purge()
1039 msg->audit = (*(u32 *) &parm->purge.ipaudit) >> 8; in iucv_message_purge()
1040 msg->tag = parm->purge.ipmsgtag; in iucv_message_purge()
1070 * Message is 8 bytes long and has been stored to the in iucv_message_receive_iprmdata()
1074 *residual = abs(size - 8); in iucv_message_receive_iprmdata()
1075 rmmsg = msg->rmmsg; in iucv_message_receive_iprmdata()
1078 size = (size < 8) ? size : 8; in iucv_message_receive_iprmdata()
1080 copy = min_t(size_t, size, array->length); in iucv_message_receive_iprmdata()
1081 memcpy((u8 *)(addr_t) array->address, in iucv_message_receive_iprmdata()
1084 size -= copy; in iucv_message_receive_iprmdata()
1088 memcpy(buffer, rmmsg, min_t(size_t, size, 8)); in iucv_message_receive_iprmdata()
1116 if (msg->flags & IUCV_IPRMDATA) in __iucv_message_receive()
1120 return -EIO; in __iucv_message_receive()
1124 parm->db.ipbfadr1 = (u32)(addr_t) buffer; in __iucv_message_receive()
1125 parm->db.ipbfln1f = (u32) size; in __iucv_message_receive()
1126 parm->db.ipmsgid = msg->id; in __iucv_message_receive()
1127 parm->db.ippathid = path->pathid; in __iucv_message_receive()
1128 parm->db.iptrgcls = msg->class; in __iucv_message_receive()
1129 parm->db.ipflags1 = (flags | IUCV_IPFGPID | in __iucv_message_receive()
1133 msg->flags = parm->db.ipflags1; in __iucv_message_receive()
1135 *residual = parm->db.ipbfln1f; in __iucv_message_receive()
1163 if (msg->flags & IUCV_IPRMDATA) in iucv_message_receive()
1191 rc = -EIO; in iucv_message_reject()
1196 parm->db.ippathid = path->pathid; in iucv_message_reject()
1197 parm->db.ipmsgid = msg->id; in iucv_message_reject()
1198 parm->db.iptrgcls = msg->class; in iucv_message_reject()
1199 parm->db.ipflags1 = (IUCV_IPTRGCLS | IUCV_IPFGMID | IUCV_IPFGPID); in iucv_message_reject()
1215 * This function responds to the two-way messages that you receive. You
1230 rc = -EIO; in iucv_message_reply()
1236 parm->dpl.ippathid = path->pathid; in iucv_message_reply()
1237 parm->dpl.ipflags1 = flags; in iucv_message_reply()
1238 parm->dpl.ipmsgid = msg->id; in iucv_message_reply()
1239 parm->dpl.iptrgcls = msg->class; in iucv_message_reply()
1240 memcpy(parm->dpl.iprmmsg, reply, min_t(size_t, size, 8)); in iucv_message_reply()
1242 parm->db.ipbfadr1 = (u32)(addr_t) reply; in iucv_message_reply()
1243 parm->db.ipbfln1f = (u32) size; in iucv_message_reply()
1244 parm->db.ippathid = path->pathid; in iucv_message_reply()
1245 parm->db.ipflags1 = flags; in iucv_message_reply()
1246 parm->db.ipmsgid = msg->id; in iucv_message_reply()
1247 parm->db.iptrgcls = msg->class; in iucv_message_reply()
1266 * transmitted is in a buffer and this is a one-way message and the
1280 rc = -EIO; in __iucv_message_send()
1286 /* Message of 8 bytes can be placed into the parameter list. */ in __iucv_message_send()
1287 parm->dpl.ippathid = path->pathid; in __iucv_message_send()
1288 parm->dpl.ipflags1 = flags | IUCV_IPNORPY; in __iucv_message_send()
1289 parm->dpl.iptrgcls = msg->class; in __iucv_message_send()
1290 parm->dpl.ipsrccls = srccls; in __iucv_message_send()
1291 parm->dpl.ipmsgtag = msg->tag; in __iucv_message_send()
1292 memcpy(parm->dpl.iprmmsg, buffer, 8); in __iucv_message_send()
1294 parm->db.ipbfadr1 = (u32)(addr_t) buffer; in __iucv_message_send()
1295 parm->db.ipbfln1f = (u32) size; in __iucv_message_send()
1296 parm->db.ippathid = path->pathid; in __iucv_message_send()
1297 parm->db.ipflags1 = flags | IUCV_IPNORPY; in __iucv_message_send()
1298 parm->db.iptrgcls = msg->class; in __iucv_message_send()
1299 parm->db.ipsrccls = srccls; in __iucv_message_send()
1300 parm->db.ipmsgtag = msg->tag; in __iucv_message_send()
1304 msg->id = parm->db.ipmsgid; in __iucv_message_send()
1320 * transmitted is in a buffer and this is a one-way message and the
1367 rc = -EIO; in iucv_message_send2way()
1373 parm->dpl.ippathid = path->pathid; in iucv_message_send2way()
1374 parm->dpl.ipflags1 = path->flags; /* priority message */ in iucv_message_send2way()
1375 parm->dpl.iptrgcls = msg->class; in iucv_message_send2way()
1376 parm->dpl.ipsrccls = srccls; in iucv_message_send2way()
1377 parm->dpl.ipmsgtag = msg->tag; in iucv_message_send2way()
1378 parm->dpl.ipbfadr2 = (u32)(addr_t) answer; in iucv_message_send2way()
1379 parm->dpl.ipbfln2f = (u32) asize; in iucv_message_send2way()
1380 memcpy(parm->dpl.iprmmsg, buffer, 8); in iucv_message_send2way()
1382 parm->db.ippathid = path->pathid; in iucv_message_send2way()
1383 parm->db.ipflags1 = path->flags; /* priority message */ in iucv_message_send2way()
1384 parm->db.iptrgcls = msg->class; in iucv_message_send2way()
1385 parm->db.ipsrccls = srccls; in iucv_message_send2way()
1386 parm->db.ipmsgtag = msg->tag; in iucv_message_send2way()
1387 parm->db.ipbfadr1 = (u32)(addr_t) buffer; in iucv_message_send2way()
1388 parm->db.ipbfln1f = (u32) size; in iucv_message_send2way()
1389 parm->db.ipbfadr2 = (u32)(addr_t) answer; in iucv_message_send2way()
1390 parm->db.ipbfln2f = (u32) asize; in iucv_message_send2way()
1394 msg->id = parm->db.ipmsgid; in iucv_message_send2way()
1414 u8 ipvmid[8];
1428 BUG_ON(iucv_path_table[ipp->ippathid]); in iucv_path_pending()
1431 path = iucv_path_alloc(ipp->ipmsglim, ipp->ipflags1, GFP_ATOMIC); in iucv_path_pending()
1434 path->pathid = ipp->ippathid; in iucv_path_pending()
1435 iucv_path_table[path->pathid] = path; in iucv_path_pending()
1436 EBCASC(ipp->ipvmid, 8); in iucv_path_pending()
1440 if (!handler->path_pending) in iucv_path_pending()
1447 list_add(&path->list, &handler->paths); in iucv_path_pending()
1448 path->handler = handler; in iucv_path_pending()
1449 if (!handler->path_pending(path, ipp->ipvmid, ipp->ipuser)) in iucv_path_pending()
1451 list_del(&path->list); in iucv_path_pending()
1452 path->handler = NULL; in iucv_path_pending()
1455 iucv_path_table[path->pathid] = NULL; in iucv_path_pending()
1459 iucv_sever_pathid(ipp->ippathid, error); in iucv_path_pending()
1475 u8 res2[8];
1485 struct iucv_path *path = iucv_path_table[ipc->ippathid]; in iucv_path_complete()
1488 path->flags = ipc->ipflags1; in iucv_path_complete()
1489 if (path && path->handler && path->handler->path_complete) in iucv_path_complete()
1490 path->handler->path_complete(path, ipc->ipuser); in iucv_path_complete()
1505 u8 res3[8];
1515 struct iucv_path *path = iucv_path_table[ips->ippathid]; in iucv_path_severed()
1517 if (!path || !path->handler) /* Already severed */ in iucv_path_severed()
1519 if (path->handler->path_severed) in iucv_path_severed()
1520 path->handler->path_severed(path, ips->ipuser); in iucv_path_severed()
1522 iucv_sever_pathid(path->pathid, NULL); in iucv_path_severed()
1523 iucv_path_table[path->pathid] = NULL; in iucv_path_severed()
1524 list_del(&path->list); in iucv_path_severed()
1541 u8 res3[8];
1551 struct iucv_path *path = iucv_path_table[ipq->ippathid]; in iucv_path_quiesced()
1553 if (path && path->handler && path->handler->path_quiesced) in iucv_path_quiesced()
1554 path->handler->path_quiesced(path, ipq->ipuser); in iucv_path_quiesced()
1569 u8 res3[8];
1579 struct iucv_path *path = iucv_path_table[ipr->ippathid]; in iucv_path_resumed()
1581 if (path && path->handler && path->handler->path_resumed) in iucv_path_resumed()
1582 path->handler->path_resumed(path, ipr->ipuser); in iucv_path_resumed()
1598 u8 iprmmsg[8];
1610 struct iucv_path *path = iucv_path_table[imc->ippathid]; in iucv_message_complete()
1613 if (path && path->handler && path->handler->message_complete) { in iucv_message_complete()
1614 msg.flags = imc->ipflags1; in iucv_message_complete()
1615 msg.id = imc->ipmsgid; in iucv_message_complete()
1616 msg.audit = imc->ipaudit; in iucv_message_complete()
1617 memcpy(msg.rmmsg, imc->iprmmsg, 8); in iucv_message_complete()
1618 msg.class = imc->ipsrccls; in iucv_message_complete()
1619 msg.tag = imc->ipmsgtag; in iucv_message_complete()
1620 msg.length = imc->ipbfln2f; in iucv_message_complete()
1621 path->handler->message_complete(path, &msg); in iucv_message_complete()
1655 struct iucv_path *path = iucv_path_table[imp->ippathid]; in iucv_message_pending()
1658 if (path && path->handler && path->handler->message_pending) { in iucv_message_pending()
1659 msg.flags = imp->ipflags1; in iucv_message_pending()
1660 msg.id = imp->ipmsgid; in iucv_message_pending()
1661 msg.class = imp->iptrgcls; in iucv_message_pending()
1662 if (imp->ipflags1 & IUCV_IPRMDATA) { in iucv_message_pending()
1663 memcpy(msg.rmmsg, imp->ln1msg1.iprmmsg1, 8); in iucv_message_pending()
1664 msg.length = 8; in iucv_message_pending()
1666 msg.length = imp->ln1msg2.ipbfln1f; in iucv_message_pending()
1667 msg.reply_size = imp->ipbfln2f; in iucv_message_pending()
1668 path->handler->message_pending(path, &msg); in iucv_message_pending()
1707 list_del_init(&p->list); in iucv_tasklet_fn()
1708 irq_fn[p->data.iptype](&p->data); in iucv_tasklet_fn()
1712 iucv_active_cpu = -1; in iucv_tasklet_fn()
1738 list_del_init(&p->list); in iucv_work_fn()
1739 iucv_path_pending(&p->data); in iucv_work_fn()
1743 iucv_active_cpu = -1; in iucv_work_fn()
1762 if (p->ippathid >= iucv_max_pathid) { in iucv_external_interrupt()
1763 WARN_ON(p->ippathid >= iucv_max_pathid); in iucv_external_interrupt()
1764 iucv_sever_pathid(p->ippathid, iucv_error_no_listener); in iucv_external_interrupt()
1767 BUG_ON(p->iptype < 0x01 || p->iptype > 0x09); in iucv_external_interrupt()
1773 memcpy(&work->data, p, sizeof(work->data)); in iucv_external_interrupt()
1775 if (p->iptype == 0x01) { in iucv_external_interrupt()
1777 list_add_tail(&work->list, &iucv_work_queue); in iucv_external_interrupt()
1781 list_add_tail(&work->list, &iucv_task_queue); in iucv_external_interrupt()
1819 rc = -EPROTONOSUPPORT; in iucv_init()