1 // SPDX-License-Identifier: GPL-2.0-only 2 3 #define pr_fmt(fmt) "papr-hvpipe: " fmt 4 5 #include <linux/module.h> 6 #include <linux/kernel.h> 7 #include <linux/types.h> 8 #include <linux/delay.h> 9 #include <linux/anon_inodes.h> 10 #include <linux/miscdevice.h> 11 #include <linux/file.h> 12 #include <linux/fs.h> 13 #include <linux/poll.h> 14 #include <linux/of.h> 15 #include <asm/machdep.h> 16 #include <asm/rtas.h> 17 #include <asm/rtas-work-area.h> 18 #include <asm/papr-sysparm.h> 19 #include <uapi/asm/papr-hvpipe.h> 20 #include "pseries.h" 21 #include "papr-hvpipe.h" 22 23 static DEFINE_SPINLOCK(hvpipe_src_list_lock); 24 static LIST_HEAD(hvpipe_src_list); 25 26 static unsigned char hvpipe_ras_buf[RTAS_ERROR_LOG_MAX]; 27 static struct workqueue_struct *papr_hvpipe_wq; 28 static struct work_struct *papr_hvpipe_work; 29 static int hvpipe_check_exception_token; 30 static bool hvpipe_feature; 31 32 /* 33 * New PowerPC FW provides support for partitions and various 34 * sources (Ex: remote hardware management console (HMC)) to 35 * exchange information through an inband hypervisor channel 36 * called HVPIPE. Only HMCs are supported right now and 37 * partitions can communicate with multiple HMCs and each 38 * source represented by source ID. 39 * 40 * FW introduces send HVPIPE and recv HVPIPE RTAS calls for 41 * partitions to send and receive payloads respectively. 42 * 43 * These RTAS functions have the following certain requirements 44 * / limitations: 45 * - One hvpipe per partition for all sources. 46 * - Assume the return status of send HVPIPE as delivered to source 47 * - Assume the return status of recv HVPIPE as ACK to source 48 * - Generates HVPIPE event message when the payload is ready 49 * for the partition. The hypervisor will not deliver another 50 * event until the partition read the previous payload which 51 * means the pipe is blocked for any sources. 52 * 53 * Linux implementation: 54 * Follow the similar interfaces that the OS has for other RTAS calls. 55 * ex: /dev/papr-indices, /dev/papr-vpd, etc. 56 * - /dev/papr-hvpipe is available for the user space. 57 * - devfd = open("/dev/papr-hvpipe", ..) 58 * - fd = ioctl(fd,HVPIPE_IOC_CREATE_HANDLE,&srcID)-for each source 59 * - write(fd, buf, size) --> Issue send HVPIPE RTAS call and 60 * returns size for success or the corresponding error for RTAS 61 * return code for failure. 62 * - poll(fd,..) -> wakeup FD if the payload is available to read. 63 * HVPIPE event message handler wakeup FD based on source ID in 64 * the event message 65 * - read(fd, buf, size) --> Issue recv HVPIPE RTAS call and 66 * returns size for success or the corresponding error for RTAS 67 * return code for failure. 68 */ 69 70 /* 71 * ibm,receive-hvpipe-msg RTAS call. 72 * @area: Caller-provided work area buffer for results. 73 * @srcID: Source ID returned by the RTAS call. 74 * @bytesw: Bytes written by RTAS call to @area. 75 */ 76 static int rtas_ibm_receive_hvpipe_msg(struct rtas_work_area *area, 77 u32 *srcID, u32 *bytesw) 78 { 79 const s32 token = rtas_function_token(RTAS_FN_IBM_RECEIVE_HVPIPE_MSG); 80 u32 rets[2]; 81 s32 fwrc; 82 int ret; 83 84 if (token == RTAS_UNKNOWN_SERVICE) 85 return -ENOENT; 86 87 do { 88 fwrc = rtas_call(token, 2, 3, rets, 89 rtas_work_area_phys(area), 90 rtas_work_area_size(area)); 91 92 } while (rtas_busy_delay(fwrc)); 93 94 switch (fwrc) { 95 case RTAS_SUCCESS: 96 *srcID = rets[0]; 97 *bytesw = rets[1]; 98 ret = 0; 99 break; 100 case RTAS_HARDWARE_ERROR: 101 ret = -EIO; 102 break; 103 case RTAS_INVALID_PARAMETER: 104 ret = -EINVAL; 105 break; 106 case RTAS_FUNC_NOT_SUPPORTED: 107 ret = -EOPNOTSUPP; 108 break; 109 default: 110 ret = -EIO; 111 pr_err_ratelimited("unexpected ibm,receive-hvpipe-msg status %d\n", fwrc); 112 break; 113 } 114 115 return ret; 116 } 117 118 /* 119 * ibm,send-hvpipe-msg RTAS call 120 * @area: Caller-provided work area buffer to send. 121 * @srcID: Target source for the send pipe message. 122 */ 123 static int rtas_ibm_send_hvpipe_msg(struct rtas_work_area *area, u32 srcID) 124 { 125 const s32 token = rtas_function_token(RTAS_FN_IBM_SEND_HVPIPE_MSG); 126 s32 fwrc; 127 int ret; 128 129 if (token == RTAS_UNKNOWN_SERVICE) 130 return -ENOENT; 131 132 do { 133 fwrc = rtas_call(token, 2, 1, NULL, srcID, 134 rtas_work_area_phys(area)); 135 136 } while (rtas_busy_delay(fwrc)); 137 138 switch (fwrc) { 139 case RTAS_SUCCESS: 140 ret = 0; 141 break; 142 case RTAS_HARDWARE_ERROR: 143 ret = -EIO; 144 break; 145 case RTAS_INVALID_PARAMETER: 146 ret = -EINVAL; 147 break; 148 case RTAS_HVPIPE_CLOSED: 149 ret = -EPIPE; 150 break; 151 case RTAS_FUNC_NOT_SUPPORTED: 152 ret = -EOPNOTSUPP; 153 break; 154 default: 155 ret = -EIO; 156 pr_err_ratelimited("unexpected ibm,receive-hvpipe-msg status %d\n", fwrc); 157 break; 158 } 159 160 return ret; 161 } 162 163 static struct hvpipe_source_info *hvpipe_find_source(u32 srcID) 164 { 165 struct hvpipe_source_info *src_info; 166 167 list_for_each_entry(src_info, &hvpipe_src_list, list) 168 if (src_info->srcID == srcID) 169 return src_info; 170 171 return NULL; 172 } 173 174 /* 175 * This work function collects receive buffer with recv HVPIPE 176 * RTAS call. Called from read() 177 * @buf: User specified buffer to copy the payload that returned 178 * from recv HVPIPE RTAS. 179 * @size: Size of buffer user passed. 180 */ 181 static int hvpipe_rtas_recv_msg(char __user *buf, int size) 182 { 183 struct rtas_work_area *work_area; 184 u32 srcID, bytes_written; 185 int ret; 186 187 work_area = rtas_work_area_alloc(SZ_4K); 188 if (!work_area) { 189 pr_err("Could not allocate RTAS buffer for recv pipe\n"); 190 return -ENOMEM; 191 } 192 193 /* 194 * Recv HVPIPE RTAS is successful. 195 * When releasing FD or no one is waiting on the 196 * specific source, issue recv HVPIPE RTAS call 197 * so that pipe is not blocked - this func is called 198 * with NULL buf. 199 */ 200 ret = rtas_ibm_receive_hvpipe_msg(work_area, &srcID, &bytes_written); 201 if (ret) { 202 pr_err("ibm,receive-hvpipe-msg failed with %d\n", ret); 203 goto out; 204 } 205 206 if (!buf) 207 goto out; 208 209 if (size < bytes_written) { 210 pr_err("Received the payload size = %d, but the buffer size = %d\n", 211 bytes_written, size); 212 bytes_written = size; 213 } 214 215 if (copy_to_user(buf, rtas_work_area_raw_buf(work_area), bytes_written)) 216 ret = -EFAULT; 217 else 218 ret = bytes_written; 219 220 out: 221 rtas_work_area_free(work_area); 222 return ret; 223 } 224 225 /* 226 * papr_hvpipe_handle_write - Issue send HVPIPE RTAS and return 227 * the size (payload + HVPIPE_HDR_LEN) for RTAS success. 228 * Otherwise returns the status of RTAS to the user space 229 */ 230 static ssize_t papr_hvpipe_handle_write(struct file *file, 231 const char __user *buf, size_t size, loff_t *off) 232 { 233 struct hvpipe_source_info *src_info = file->private_data; 234 struct rtas_work_area *work_area, *work_buf; 235 unsigned long ret, len; 236 __be64 *area_be; 237 238 /* 239 * Return -ENXIO during migration 240 */ 241 if (!hvpipe_feature) 242 return -ENXIO; 243 244 if (!src_info) 245 return -EIO; 246 247 /* 248 * Send HVPIPE RTAS is used to send payload to the specific 249 * source with the input parameters source ID and the payload 250 * as buffer list. Each entry in the buffer list contains 251 * address/length pair of the buffer. 252 * 253 * The buffer list format is as follows: 254 * 255 * Header (length of address/length pairs and the header length) 256 * Address of 4K buffer 1 257 * Length of 4K buffer 1 used 258 * ... 259 * Address of 4K buffer n 260 * Length of 4K buffer n used 261 * 262 * See PAPR 7.3.32.2 ibm,send-hvpipe-msg 263 * 264 * Even though can support max 1MB payload, the hypervisor 265 * supports only 4048 bytes payload at present and also 266 * just one address/length entry. 267 * 268 * writev() interface can be added in future when the 269 * hypervisor supports multiple buffer list entries. 270 */ 271 /* HVPIPE_MAX_WRITE_BUFFER_SIZE = 4048 bytes */ 272 if ((size > (HVPIPE_HDR_LEN + HVPIPE_MAX_WRITE_BUFFER_SIZE)) || 273 (size <= HVPIPE_HDR_LEN)) 274 return -EINVAL; 275 276 /* 277 * The length of (address + length) pair + the length of header 278 */ 279 len = (2 * sizeof(u64)) + sizeof(u64); 280 size -= HVPIPE_HDR_LEN; 281 buf += HVPIPE_HDR_LEN; 282 mutex_lock(&rtas_ibm_send_hvpipe_msg_lock); 283 work_area = rtas_work_area_alloc(SZ_4K); 284 if (!work_area) { 285 ret = -ENOMEM; 286 goto out; 287 } 288 area_be = (__be64 *)rtas_work_area_raw_buf(work_area); 289 /* header */ 290 area_be[0] = cpu_to_be64(len); 291 292 work_buf = rtas_work_area_alloc(SZ_4K); 293 if (!work_buf) { 294 ret = -ENOMEM; 295 goto out_work; 296 } 297 /* First buffer address */ 298 area_be[1] = cpu_to_be64(rtas_work_area_phys(work_buf)); 299 /* First buffer address length */ 300 area_be[2] = cpu_to_be64(size); 301 302 if (!copy_from_user(rtas_work_area_raw_buf(work_buf), buf, size)) { 303 ret = rtas_ibm_send_hvpipe_msg(work_area, src_info->srcID); 304 if (!ret) 305 ret = size + HVPIPE_HDR_LEN; 306 } else 307 ret = -EPERM; 308 309 rtas_work_area_free(work_buf); 310 out_work: 311 rtas_work_area_free(work_area); 312 out: 313 mutex_unlock(&rtas_ibm_send_hvpipe_msg_lock); 314 return ret; 315 } 316 317 /* 318 * papr_hvpipe_handle_read - If the payload for the specific 319 * source is pending in the hypervisor, issue recv HVPIPE RTAS 320 * and return the payload to the user space. 321 * 322 * When the payload is available for the partition, the 323 * hypervisor notifies HVPIPE event with the source ID 324 * and the event handler wakeup FD(s) that are waiting. 325 */ 326 static ssize_t papr_hvpipe_handle_read(struct file *file, 327 char __user *buf, size_t size, loff_t *off) 328 { 329 330 struct hvpipe_source_info *src_info = file->private_data; 331 struct papr_hvpipe_hdr hdr = {}; 332 ssize_t ret = 0; 333 334 /* 335 * Return -ENXIO during migration 336 */ 337 if (!hvpipe_feature) 338 return -ENXIO; 339 340 if (!src_info) 341 return -EIO; 342 343 /* 344 * Max payload is 4048 (HVPIPE_MAX_WRITE_BUFFER_SIZE) 345 */ 346 if ((size > (HVPIPE_HDR_LEN + HVPIPE_MAX_WRITE_BUFFER_SIZE)) || 347 (size < HVPIPE_HDR_LEN)) 348 return -EINVAL; 349 350 /* 351 * Payload is not available to receive or source pipe 352 * is not closed. 353 */ 354 if (!src_info->hvpipe_status) 355 return 0; 356 357 hdr.version = 0; 358 hdr.flags = 0; 359 360 /* 361 * In case if the hvpipe has payload and also the 362 * hypervisor closed the pipe to the source, retrieve 363 * the payload and return to the user space first and 364 * then notify the userspace about the hvpipe close in 365 * next read(). 366 */ 367 if (src_info->hvpipe_status & HVPIPE_MSG_AVAILABLE) 368 hdr.flags = HVPIPE_MSG_AVAILABLE; 369 else if (src_info->hvpipe_status & HVPIPE_LOST_CONNECTION) 370 hdr.flags = HVPIPE_LOST_CONNECTION; 371 else 372 /* 373 * Should not be here without one of the above 374 * flags set 375 */ 376 return -EIO; 377 378 ret = copy_to_user(buf, &hdr, HVPIPE_HDR_LEN); 379 if (ret) 380 return -EFAULT; 381 382 /* 383 * Message event has payload, so get the payload with 384 * recv HVPIPE RTAS. 385 */ 386 if (hdr.flags & HVPIPE_MSG_AVAILABLE) { 387 ret = hvpipe_rtas_recv_msg(buf + HVPIPE_HDR_LEN, 388 size - HVPIPE_HDR_LEN); 389 /* 390 * Always clear MSG_AVAILABLE once the RTAS call has drained 391 * the message, regardless of whether copy_to_user succeeded. 392 */ 393 if (ret >= 0 || ret == -EFAULT) 394 src_info->hvpipe_status &= ~HVPIPE_MSG_AVAILABLE; 395 } else if (hdr.flags & HVPIPE_LOST_CONNECTION) { 396 /* 397 * Hypervisor is closing the pipe for the specific 398 * source. So notify user space. 399 */ 400 src_info->hvpipe_status &= ~HVPIPE_LOST_CONNECTION; 401 } 402 403 if (ret >= 0) 404 ret += HVPIPE_HDR_LEN; 405 406 return ret; 407 } 408 409 /* 410 * The user space waits for the payload to receive. 411 * The hypervisor sends HVPIPE event message to the partition 412 * when the payload is available. The event handler wakeup FD 413 * depends on the source ID in the message event. 414 */ 415 static __poll_t papr_hvpipe_handle_poll(struct file *filp, 416 struct poll_table_struct *wait) 417 { 418 struct hvpipe_source_info *src_info = filp->private_data; 419 420 /* 421 * HVPIPE is disabled during SUSPEND and enabled after migration. 422 * So return POLLRDHUP during migration 423 */ 424 if (!hvpipe_feature) 425 return POLLRDHUP; 426 427 if (!src_info) 428 return POLLNVAL; 429 430 /* 431 * If hvpipe already has pending payload, return so that 432 * the user space can issue read(). 433 */ 434 if (src_info->hvpipe_status) 435 return POLLIN | POLLRDNORM; 436 437 /* 438 * Wait for the message event 439 * hvpipe_event_interrupt() wakes up this wait_queue 440 */ 441 poll_wait(filp, &src_info->recv_wqh, wait); 442 if (src_info->hvpipe_status) 443 return POLLIN | POLLRDNORM; 444 445 return 0; 446 } 447 448 static int papr_hvpipe_handle_release(struct inode *inode, 449 struct file *file) 450 { 451 struct hvpipe_source_info *src_info; 452 unsigned long flags; 453 454 /* 455 * Hold the lock, remove source from src_list, reset the 456 * hvpipe status and release the lock to prevent any race 457 * with message event IRQ. 458 */ 459 spin_lock_irqsave(&hvpipe_src_list_lock, flags); 460 src_info = file->private_data; 461 list_del(&src_info->list); 462 file->private_data = NULL; 463 spin_unlock_irqrestore(&hvpipe_src_list_lock, flags); 464 /* 465 * If the pipe for this specific source has any pending 466 * payload, issue recv HVPIPE RTAS so that pipe will not 467 * be blocked. 468 */ 469 if (src_info->hvpipe_status & HVPIPE_MSG_AVAILABLE) { 470 src_info->hvpipe_status = 0; 471 hvpipe_rtas_recv_msg(NULL, 0); 472 } 473 474 kfree(src_info); 475 return 0; 476 } 477 478 static const struct file_operations papr_hvpipe_handle_ops = { 479 .read = papr_hvpipe_handle_read, 480 .write = papr_hvpipe_handle_write, 481 .release = papr_hvpipe_handle_release, 482 .poll = papr_hvpipe_handle_poll, 483 }; 484 485 static int papr_hvpipe_dev_create_handle(u32 srcID) 486 { 487 struct hvpipe_source_info *src_info; 488 int fd; 489 unsigned long flags; 490 491 src_info = kzalloc_obj(*src_info, GFP_KERNEL_ACCOUNT); 492 if (!src_info) 493 return -ENOMEM; 494 495 src_info->srcID = srcID; 496 init_waitqueue_head(&src_info->recv_wqh); 497 498 /* 499 * Do not allow more than one process communicates with 500 * each source. 501 */ 502 spin_lock_irqsave(&hvpipe_src_list_lock, flags); 503 if (hvpipe_find_source(srcID)) { 504 spin_unlock_irqrestore(&hvpipe_src_list_lock, flags); 505 pr_err("pid(%s:%d) could not get the source(%d)\n", 506 current->comm, task_pid_nr(current), srcID); 507 kfree(src_info); 508 return -EALREADY; 509 } 510 list_add(&src_info->list, &hvpipe_src_list); 511 spin_unlock_irqrestore(&hvpipe_src_list_lock, flags); 512 513 fd = FD_ADD(O_RDONLY | O_CLOEXEC, 514 anon_inode_getfile("[papr-hvpipe]", &papr_hvpipe_handle_ops, 515 (void *)src_info, O_RDWR)); 516 if (fd < 0) { 517 spin_lock_irqsave(&hvpipe_src_list_lock, flags); 518 list_del(&src_info->list); 519 spin_unlock_irqrestore(&hvpipe_src_list_lock, flags); 520 /* 521 * if we fail to add FD, that means no userspace program is 522 * polling. In that case if there is a msg pending because the 523 * interrupt was fired after the src_info was added to the 524 * global list, then let's consume it here, to unblock the 525 * hvpipe 526 */ 527 if (src_info->hvpipe_status & HVPIPE_MSG_AVAILABLE) 528 hvpipe_rtas_recv_msg(NULL, 0); 529 kfree(src_info); 530 return fd; 531 } 532 533 return fd; 534 } 535 536 /* 537 * Top-level ioctl handler for /dev/papr_hvpipe 538 * 539 * Use separate FD for each source (exa :HMC). So ioctl is called 540 * with source ID which returns FD. 541 */ 542 static long papr_hvpipe_dev_ioctl(struct file *filp, unsigned int ioctl, 543 unsigned long arg) 544 { 545 u32 __user *argp = (void __user *)arg; 546 u32 srcID; 547 long ret; 548 549 /* 550 * Return -ENXIO during migration 551 */ 552 if (!hvpipe_feature) 553 return -ENXIO; 554 555 if (get_user(srcID, argp)) 556 return -EFAULT; 557 558 /* 559 * Support only HMC source right now 560 */ 561 if (!(srcID & HVPIPE_HMC_ID_MASK)) 562 return -EINVAL; 563 564 switch (ioctl) { 565 case PAPR_HVPIPE_IOC_CREATE_HANDLE: 566 ret = papr_hvpipe_dev_create_handle(srcID); 567 break; 568 default: 569 ret = -ENOIOCTLCMD; 570 break; 571 } 572 573 return ret; 574 } 575 576 /* 577 * papr_hvpipe_work_fn - called to issue recv HVPIPE RTAS for 578 * sources that are not monitored by user space so that pipe 579 * will not be blocked. 580 */ 581 static void papr_hvpipe_work_fn(struct work_struct *work) 582 { 583 hvpipe_rtas_recv_msg(NULL, 0); 584 } 585 586 /* 587 * HVPIPE event message IRQ handler. 588 * The hypervisor sends event IRQ if the partition has payload 589 * and generates another event only after payload is read with 590 * recv HVPIPE RTAS. 591 */ 592 static irqreturn_t hvpipe_event_interrupt(int irq, void *dev_id) 593 { 594 struct hvpipe_event_buf *hvpipe_event; 595 struct pseries_errorlog *pseries_log; 596 struct hvpipe_source_info *src_info; 597 struct rtas_error_log *elog; 598 int rc; 599 600 rc = rtas_call(hvpipe_check_exception_token, 6, 1, NULL, 601 RTAS_VECTOR_EXTERNAL_INTERRUPT, virq_to_hw(irq), 602 RTAS_HVPIPE_MSG_EVENTS, 1, __pa(&hvpipe_ras_buf), 603 rtas_get_error_log_max()); 604 605 if (rc != 0) { 606 pr_err_ratelimited("unexpected hvpipe-event-notification failed %d\n", rc); 607 return IRQ_HANDLED; 608 } 609 610 elog = (struct rtas_error_log *)hvpipe_ras_buf; 611 if (unlikely(rtas_error_type(elog) != RTAS_TYPE_HVPIPE)) { 612 pr_warn_ratelimited("Unexpected event type %d\n", 613 rtas_error_type(elog)); 614 return IRQ_HANDLED; 615 } 616 617 pseries_log = get_pseries_errorlog(elog, 618 PSERIES_ELOG_SECT_ID_HVPIPE_EVENT); 619 hvpipe_event = (struct hvpipe_event_buf *)pseries_log->data; 620 621 /* 622 * The hypervisor notifies partition when the payload is 623 * available to read with recv HVPIPE RTAS and it will not 624 * notify another event for any source until the previous 625 * payload is read. Means the pipe is blocked in the 626 * hypervisor until the payload is read. 627 * 628 * If the source is ready to accept payload and wakeup the 629 * corresponding FD. Hold lock and update hvpipe_status 630 * and this lock is needed in case the user space process 631 * is in release FD instead of poll() so that release() 632 * reads the payload to unblock pipe before closing FD. 633 * 634 * otherwise (means no other user process waiting for the 635 * payload, issue recv HVPIPE RTAS (papr_hvpipe_work_fn()) 636 * to unblock pipe. 637 */ 638 spin_lock(&hvpipe_src_list_lock); 639 src_info = hvpipe_find_source(be32_to_cpu(hvpipe_event->srcID)); 640 if (src_info) { 641 u32 flags = 0; 642 643 if (hvpipe_event->event_type & HVPIPE_LOST_CONNECTION) 644 flags = HVPIPE_LOST_CONNECTION; 645 else if (hvpipe_event->event_type & HVPIPE_MSG_AVAILABLE) 646 flags = HVPIPE_MSG_AVAILABLE; 647 648 src_info->hvpipe_status |= flags; 649 wake_up(&src_info->recv_wqh); 650 spin_unlock(&hvpipe_src_list_lock); 651 } else { 652 spin_unlock(&hvpipe_src_list_lock); 653 /* 654 * user space is not waiting on this source. So 655 * execute receive pipe RTAS so that pipe will not 656 * be blocked. 657 */ 658 if (hvpipe_event->event_type & HVPIPE_MSG_AVAILABLE) 659 queue_work(papr_hvpipe_wq, papr_hvpipe_work); 660 } 661 662 return IRQ_HANDLED; 663 } 664 665 /* 666 * Enable hvpipe by system parameter set with parameter 667 * token = 64 and with 1 byte buffer data: 668 * 0 = hvpipe not in use/disable 669 * 1 = hvpipe in use/enable 670 */ 671 static int set_hvpipe_sys_param(u8 val) 672 { 673 struct papr_sysparm_buf *buf; 674 int ret; 675 676 buf = papr_sysparm_buf_alloc(); 677 if (!buf) 678 return -ENOMEM; 679 680 buf->len = cpu_to_be16(1); 681 buf->val[0] = val; 682 ret = papr_sysparm_set(PAPR_SYSPARM_HVPIPE_ENABLE, buf); 683 if (ret) 684 pr_err("Can not enable hvpipe %d\n", ret); 685 686 papr_sysparm_buf_free(buf); 687 688 return ret; 689 } 690 691 static int __init enable_hvpipe_IRQ(void) 692 { 693 struct device_node *np; 694 695 hvpipe_check_exception_token = rtas_function_token(RTAS_FN_CHECK_EXCEPTION); 696 if (hvpipe_check_exception_token == RTAS_UNKNOWN_SERVICE) 697 return -ENODEV; 698 699 /* hvpipe events */ 700 np = of_find_node_by_path("/event-sources/ibm,hvpipe-msg-events"); 701 if (!np) { 702 pr_err("No device node found, could not enable hvpipe event IRQ\n"); 703 return -ENODEV; 704 } 705 706 request_event_sources_irqs(np, hvpipe_event_interrupt, "HPIPE_EVENT"); 707 of_node_put(np); 708 709 return 0; 710 } 711 712 void hvpipe_migration_handler(int action) 713 { 714 pr_info("hvpipe migration event %d\n", action); 715 716 /* 717 * HVPIPE is not used (Failed to create /dev/papr-hvpipe). 718 * So nothing to do for migration. 719 */ 720 if (!papr_hvpipe_work) 721 return; 722 723 switch (action) { 724 case HVPIPE_SUSPEND: 725 if (hvpipe_feature) { 726 /* 727 * Disable hvpipe_feature to the user space. 728 * It will be enabled with RESUME event. 729 */ 730 hvpipe_feature = false; 731 /* 732 * set system parameter hvpipe 'disable' 733 */ 734 set_hvpipe_sys_param(0); 735 } 736 break; 737 case HVPIPE_RESUME: 738 /* 739 * set system parameter hvpipe 'enable' 740 */ 741 if (!set_hvpipe_sys_param(1)) 742 hvpipe_feature = true; 743 else 744 pr_err("hvpipe is not enabled after migration\n"); 745 746 break; 747 } 748 } 749 750 static const struct file_operations papr_hvpipe_ops = { 751 .unlocked_ioctl = papr_hvpipe_dev_ioctl, 752 }; 753 754 static struct miscdevice papr_hvpipe_dev = { 755 .minor = MISC_DYNAMIC_MINOR, 756 .name = "papr-hvpipe", 757 .fops = &papr_hvpipe_ops, 758 }; 759 760 static int __init papr_hvpipe_init(void) 761 { 762 int ret; 763 764 if (!of_find_property(rtas.dev, "ibm,hypervisor-pipe-capable", 765 NULL)) 766 return -ENODEV; 767 768 if (!rtas_function_implemented(RTAS_FN_IBM_SEND_HVPIPE_MSG) || 769 !rtas_function_implemented(RTAS_FN_IBM_RECEIVE_HVPIPE_MSG)) 770 return -ENODEV; 771 772 papr_hvpipe_work = kzalloc_obj(struct work_struct, GFP_ATOMIC); 773 if (!papr_hvpipe_work) 774 return -ENOMEM; 775 776 INIT_WORK(papr_hvpipe_work, papr_hvpipe_work_fn); 777 778 papr_hvpipe_wq = alloc_ordered_workqueue("papr hvpipe workqueue", 0); 779 if (!papr_hvpipe_wq) { 780 ret = -ENOMEM; 781 goto out; 782 } 783 784 ret = enable_hvpipe_IRQ(); 785 if (ret) 786 goto out_wq; 787 788 ret = misc_register(&papr_hvpipe_dev); 789 if (ret) 790 goto out_wq; 791 792 ret = set_hvpipe_sys_param(1); 793 if (ret) 794 goto out_misc; 795 796 pr_info("hvpipe feature is enabled\n"); 797 hvpipe_feature = true; 798 return 0; 799 800 out_misc: 801 misc_deregister(&papr_hvpipe_dev); 802 out_wq: 803 destroy_workqueue(papr_hvpipe_wq); 804 out: 805 kfree(papr_hvpipe_work); 806 papr_hvpipe_work = NULL; 807 pr_err("hvpipe feature is not enabled %d\n", ret); 808 return ret; 809 } 810 machine_device_initcall(pseries, papr_hvpipe_init); 811