Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

iucv: introduce loadable iucv interface

This patch adds a symbol to dynamically load iucv functions.

Signed-off-by: Frank Blaschka <frank.blaschka@de.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Frank Blaschka and committed by
David S. Miller
96d042a6 99558ea9

+58 -1
+35 -1
include/net/iucv/iucv.h
··· 120 120 u32 reply_size; 121 121 u8 rmmsg[8]; 122 122 u8 flags; 123 - }; 123 + } __packed; 124 124 125 125 /* 126 126 * struct iucv_handler ··· 459 459 int iucv_message_send2way(struct iucv_path *path, struct iucv_message *msg, 460 460 u8 flags, u32 srccls, void *buffer, size_t size, 461 461 void *answer, size_t asize, size_t *residual); 462 + 463 + struct iucv_interface { 464 + int (*message_receive)(struct iucv_path *path, struct iucv_message *msg, 465 + u8 flags, void *buffer, size_t size, size_t *residual); 466 + int (*__message_receive)(struct iucv_path *path, 467 + struct iucv_message *msg, u8 flags, void *buffer, size_t size, 468 + size_t *residual); 469 + int (*message_reply)(struct iucv_path *path, struct iucv_message *msg, 470 + u8 flags, void *reply, size_t size); 471 + int (*message_reject)(struct iucv_path *path, struct iucv_message *msg); 472 + int (*message_send)(struct iucv_path *path, struct iucv_message *msg, 473 + u8 flags, u32 srccls, void *buffer, size_t size); 474 + int (*__message_send)(struct iucv_path *path, struct iucv_message *msg, 475 + u8 flags, u32 srccls, void *buffer, size_t size); 476 + int (*message_send2way)(struct iucv_path *path, 477 + struct iucv_message *msg, u8 flags, u32 srccls, void *buffer, 478 + size_t size, void *answer, size_t asize, size_t *residual); 479 + int (*message_purge)(struct iucv_path *path, struct iucv_message *msg, 480 + u32 srccls); 481 + int (*path_accept)(struct iucv_path *path, struct iucv_handler *handler, 482 + u8 userdata[16], void *private); 483 + int (*path_connect)(struct iucv_path *path, 484 + struct iucv_handler *handler, 485 + u8 userid[8], u8 system[8], u8 userdata[16], void *private); 486 + int (*path_quiesce)(struct iucv_path *path, u8 userdata[16]); 487 + int (*path_resume)(struct iucv_path *path, u8 userdata[16]); 488 + int (*path_sever)(struct iucv_path *path, u8 userdata[16]); 489 + int (*iucv_register)(struct iucv_handler *handler, int smp); 490 + void (*iucv_unregister)(struct iucv_handler *handler, int smp); 491 + struct bus_type *bus; 492 + struct device *root; 493 + }; 494 + 495 + extern struct iucv_interface iucv_if;
+23
net/iucv/iucv.c
··· 1974 1974 return rc; 1975 1975 } 1976 1976 1977 + struct iucv_interface iucv_if = { 1978 + .message_receive = iucv_message_receive, 1979 + .__message_receive = __iucv_message_receive, 1980 + .message_reply = iucv_message_reply, 1981 + .message_reject = iucv_message_reject, 1982 + .message_send = iucv_message_send, 1983 + .__message_send = __iucv_message_send, 1984 + .message_send2way = iucv_message_send2way, 1985 + .message_purge = iucv_message_purge, 1986 + .path_accept = iucv_path_accept, 1987 + .path_connect = iucv_path_connect, 1988 + .path_quiesce = iucv_path_quiesce, 1989 + .path_resume = iucv_path_resume, 1990 + .path_sever = iucv_path_sever, 1991 + .iucv_register = iucv_register, 1992 + .iucv_unregister = iucv_unregister, 1993 + .bus = NULL, 1994 + .root = NULL, 1995 + }; 1996 + EXPORT_SYMBOL(iucv_if); 1997 + 1977 1998 /** 1978 1999 * iucv_init 1979 2000 * ··· 2059 2038 rc = bus_register(&iucv_bus); 2060 2039 if (rc) 2061 2040 goto out_reboot; 2041 + iucv_if.root = iucv_root; 2042 + iucv_if.bus = &iucv_bus; 2062 2043 return 0; 2063 2044 2064 2045 out_reboot: