Hi Christian, Thank you for the patch! Yet something to improve: [auto build test ERROR on staging/staging-testing] [also build test ERROR on v5.1-rc1 next-20190322] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Christian-Gromm/staging-most-switch-to-configfs/20190322-075523 config: x86_64-randconfig-i1-03180048 (attached as .config) compiler: gcc-7 (Debian 7.3.0-1) 7.3.0 reproduce: # save the attached .config to linux build tree make ARCH=x86_64 All errors (new ones prefixed by >>): drivers/staging/most/configfs.o: In function `most_snd_grp_make_item': >> drivers/staging/most/configfs.c:484: undefined reference to `config_item_init_type_name' drivers/staging/most/configfs.o: In function `most_common_make_item': drivers/staging/most/configfs.c:404: undefined reference to `config_item_init_type_name' drivers/staging/most/configfs.o: In function `most_sound_make_group': >> drivers/staging/most/configfs.c:576: undefined reference to `config_group_init_type_name' drivers/staging/most/configfs.o: In function `most_register_configfs_subsys': >> drivers/staging/most/configfs.c:606: undefined reference to `configfs_register_subsystem' drivers/staging/most/configfs.c:608: undefined reference to `configfs_register_subsystem' drivers/staging/most/configfs.c:610: undefined reference to `configfs_register_subsystem' drivers/staging/most/configfs.c:612: undefined reference to `configfs_register_subsystem' drivers/staging/most/configfs.o: In function `most_deregister_configfs_subsys': >> drivers/staging/most/configfs.c:628: undefined reference to `configfs_unregister_subsystem' drivers/staging/most/configfs.c:630: undefined reference to `configfs_unregister_subsystem' drivers/staging/most/configfs.c:632: undefined reference to `configfs_unregister_subsystem' drivers/staging/most/configfs.c:634: undefined reference to `configfs_unregister_subsystem' drivers/staging/most/configfs.o: In function `configfs_init': >> drivers/staging/most/configfs.c:640: undefined reference to `config_group_init' drivers/staging/most/configfs.c:643: undefined reference to `config_group_init' drivers/staging/most/configfs.c:646: undefined reference to `config_group_init' drivers/staging/most/configfs.c:649: undefined reference to `config_group_init' vim +484 drivers/staging/most/configfs.c 590f3182 Christian Gromm 2019-03-21 394 590f3182 Christian Gromm 2019-03-21 395 static struct config_item *most_common_make_item(struct config_group *group, 590f3182 Christian Gromm 2019-03-21 396 const char *name) 590f3182 Christian Gromm 2019-03-21 397 { 590f3182 Christian Gromm 2019-03-21 398 struct mdev_link *mdev_link; 590f3182 Christian Gromm 2019-03-21 399 590f3182 Christian Gromm 2019-03-21 400 mdev_link = kzalloc(sizeof(*mdev_link), GFP_KERNEL); 590f3182 Christian Gromm 2019-03-21 401 if (!mdev_link) 590f3182 Christian Gromm 2019-03-21 402 return ERR_PTR(-ENOMEM); 590f3182 Christian Gromm 2019-03-21 403 590f3182 Christian Gromm 2019-03-21 @404 config_item_init_type_name(&mdev_link->item, name, 590f3182 Christian Gromm 2019-03-21 405 &mdev_link_type); 590f3182 Christian Gromm 2019-03-21 406 590f3182 Christian Gromm 2019-03-21 407 if (!strcmp(group->cg_item.ci_namebuf, "most_cdev")) 590f3182 Christian Gromm 2019-03-21 408 strcpy(mdev_link->comp, "cdev"); 590f3182 Christian Gromm 2019-03-21 409 else if (!strcmp(group->cg_item.ci_namebuf, "most_net")) 590f3182 Christian Gromm 2019-03-21 410 strcpy(mdev_link->comp, "net"); 590f3182 Christian Gromm 2019-03-21 411 else if (!strcmp(group->cg_item.ci_namebuf, "most_video")) 590f3182 Christian Gromm 2019-03-21 412 strcpy(mdev_link->comp, "video"); 590f3182 Christian Gromm 2019-03-21 413 strcpy(mdev_link->name, name); 590f3182 Christian Gromm 2019-03-21 414 return &mdev_link->item; 590f3182 Christian Gromm 2019-03-21 415 } 590f3182 Christian Gromm 2019-03-21 416 590f3182 Christian Gromm 2019-03-21 417 static void most_common_release(struct config_item *item) 590f3182 Christian Gromm 2019-03-21 418 { 590f3182 Christian Gromm 2019-03-21 419 kfree(to_most_common(item)); 590f3182 Christian Gromm 2019-03-21 420 } 590f3182 Christian Gromm 2019-03-21 421 590f3182 Christian Gromm 2019-03-21 422 static struct configfs_item_operations most_common_item_ops = { 590f3182 Christian Gromm 2019-03-21 423 .release = most_common_release, 590f3182 Christian Gromm 2019-03-21 424 }; 590f3182 Christian Gromm 2019-03-21 425 590f3182 Christian Gromm 2019-03-21 426 static struct configfs_group_operations most_common_group_ops = { 590f3182 Christian Gromm 2019-03-21 427 .make_item = most_common_make_item, 590f3182 Christian Gromm 2019-03-21 428 }; 590f3182 Christian Gromm 2019-03-21 429 590f3182 Christian Gromm 2019-03-21 430 static const struct config_item_type most_common_type = { 590f3182 Christian Gromm 2019-03-21 431 .ct_item_ops = &most_common_item_ops, 590f3182 Christian Gromm 2019-03-21 432 .ct_group_ops = &most_common_group_ops, 590f3182 Christian Gromm 2019-03-21 433 .ct_owner = THIS_MODULE, 590f3182 Christian Gromm 2019-03-21 434 }; 590f3182 Christian Gromm 2019-03-21 435 590f3182 Christian Gromm 2019-03-21 436 static struct configfs_subsystem most_cdev_subsys = { 590f3182 Christian Gromm 2019-03-21 437 .su_group = { 590f3182 Christian Gromm 2019-03-21 438 .cg_item = { 590f3182 Christian Gromm 2019-03-21 439 .ci_namebuf = "most_cdev", 590f3182 Christian Gromm 2019-03-21 440 .ci_type = &most_common_type, 590f3182 Christian Gromm 2019-03-21 441 }, 590f3182 Christian Gromm 2019-03-21 442 }, 590f3182 Christian Gromm 2019-03-21 443 }; 590f3182 Christian Gromm 2019-03-21 444 590f3182 Christian Gromm 2019-03-21 445 static struct configfs_subsystem most_net_subsys = { 590f3182 Christian Gromm 2019-03-21 446 .su_group = { 590f3182 Christian Gromm 2019-03-21 447 .cg_item = { 590f3182 Christian Gromm 2019-03-21 448 .ci_namebuf = "most_net", 590f3182 Christian Gromm 2019-03-21 449 .ci_type = &most_common_type, 590f3182 Christian Gromm 2019-03-21 450 }, 590f3182 Christian Gromm 2019-03-21 451 }, 590f3182 Christian Gromm 2019-03-21 452 }; 590f3182 Christian Gromm 2019-03-21 453 590f3182 Christian Gromm 2019-03-21 454 static struct configfs_subsystem most_video_subsys = { 590f3182 Christian Gromm 2019-03-21 455 .su_group = { 590f3182 Christian Gromm 2019-03-21 456 .cg_item = { 590f3182 Christian Gromm 2019-03-21 457 .ci_namebuf = "most_video", 590f3182 Christian Gromm 2019-03-21 458 .ci_type = &most_common_type, 590f3182 Christian Gromm 2019-03-21 459 }, 590f3182 Christian Gromm 2019-03-21 460 }, 590f3182 Christian Gromm 2019-03-21 461 }; 590f3182 Christian Gromm 2019-03-21 462 590f3182 Christian Gromm 2019-03-21 463 struct most_snd_grp { 590f3182 Christian Gromm 2019-03-21 464 struct config_group group; 590f3182 Christian Gromm 2019-03-21 465 int create; 590f3182 Christian Gromm 2019-03-21 466 struct list_head list; 590f3182 Christian Gromm 2019-03-21 467 }; 590f3182 Christian Gromm 2019-03-21 468 590f3182 Christian Gromm 2019-03-21 469 static inline struct most_snd_grp *to_most_snd_grp(struct config_item *item) 590f3182 Christian Gromm 2019-03-21 470 { 590f3182 Christian Gromm 2019-03-21 471 return item ? container_of(to_config_group(item), 590f3182 Christian Gromm 2019-03-21 472 struct most_snd_grp, group) : NULL; 590f3182 Christian Gromm 2019-03-21 473 } 590f3182 Christian Gromm 2019-03-21 474 590f3182 Christian Gromm 2019-03-21 475 static struct config_item *most_snd_grp_make_item(struct config_group *group, 590f3182 Christian Gromm 2019-03-21 476 const char *name) 590f3182 Christian Gromm 2019-03-21 477 { 590f3182 Christian Gromm 2019-03-21 478 struct mdev_link *mdev_link; 590f3182 Christian Gromm 2019-03-21 479 590f3182 Christian Gromm 2019-03-21 480 mdev_link = kzalloc(sizeof(*mdev_link), GFP_KERNEL); 590f3182 Christian Gromm 2019-03-21 481 if (!mdev_link) 590f3182 Christian Gromm 2019-03-21 482 return ERR_PTR(-ENOMEM); 590f3182 Christian Gromm 2019-03-21 483 590f3182 Christian Gromm 2019-03-21 @484 config_item_init_type_name(&mdev_link->item, name, &mdev_link_type); 590f3182 Christian Gromm 2019-03-21 485 mdev_link->create = 0; 590f3182 Christian Gromm 2019-03-21 486 strcpy(mdev_link->name, name); 590f3182 Christian Gromm 2019-03-21 487 strcpy(mdev_link->comp, "sound"); 590f3182 Christian Gromm 2019-03-21 488 return &mdev_link->item; 590f3182 Christian Gromm 2019-03-21 489 } 590f3182 Christian Gromm 2019-03-21 490 590f3182 Christian Gromm 2019-03-21 491 static ssize_t most_snd_grp_create_show(struct config_item *item, char *page) 590f3182 Christian Gromm 2019-03-21 492 { 590f3182 Christian Gromm 2019-03-21 493 return sprintf(page, "%d\n", to_most_snd_grp(item)->create); 590f3182 Christian Gromm 2019-03-21 494 } 590f3182 Christian Gromm 2019-03-21 495 590f3182 Christian Gromm 2019-03-21 496 static ssize_t most_snd_grp_create_store(struct config_item *item, 590f3182 Christian Gromm 2019-03-21 497 const char *page, size_t count) 590f3182 Christian Gromm 2019-03-21 498 { 590f3182 Christian Gromm 2019-03-21 499 struct most_snd_grp *snd_grp = to_most_snd_grp(item); 590f3182 Christian Gromm 2019-03-21 500 int ret = 0; 590f3182 Christian Gromm 2019-03-21 501 u16 tmp; 590f3182 Christian Gromm 2019-03-21 502 char *p = (char *)page; 590f3182 Christian Gromm 2019-03-21 503 590f3182 Christian Gromm 2019-03-21 504 ret = kstrtou16(p, 0, &tmp); 590f3182 Christian Gromm 2019-03-21 505 if (ret) 590f3182 Christian Gromm 2019-03-21 506 return ret; 590f3182 Christian Gromm 2019-03-21 507 if (tmp > 1) 590f3182 Christian Gromm 2019-03-21 508 return -ERANGE; 590f3182 Christian Gromm 2019-03-21 509 if (tmp) { 590f3182 Christian Gromm 2019-03-21 510 ret = most_cfg_complete("sound"); 590f3182 Christian Gromm 2019-03-21 511 if (ret) 590f3182 Christian Gromm 2019-03-21 512 return ret; 590f3182 Christian Gromm 2019-03-21 513 } 590f3182 Christian Gromm 2019-03-21 514 snd_grp->create = tmp; 590f3182 Christian Gromm 2019-03-21 515 return count; 590f3182 Christian Gromm 2019-03-21 516 } 590f3182 Christian Gromm 2019-03-21 517 590f3182 Christian Gromm 2019-03-21 518 CONFIGFS_ATTR(most_snd_grp_, create); 590f3182 Christian Gromm 2019-03-21 519 590f3182 Christian Gromm 2019-03-21 520 static struct configfs_attribute *most_snd_grp_attrs[] = { 590f3182 Christian Gromm 2019-03-21 521 &most_snd_grp_attr_create, 590f3182 Christian Gromm 2019-03-21 522 NULL, 590f3182 Christian Gromm 2019-03-21 523 }; 590f3182 Christian Gromm 2019-03-21 524 590f3182 Christian Gromm 2019-03-21 525 static void most_snd_grp_release(struct config_item *item) 590f3182 Christian Gromm 2019-03-21 526 { 590f3182 Christian Gromm 2019-03-21 527 struct most_snd_grp *group = to_most_snd_grp(item); 590f3182 Christian Gromm 2019-03-21 528 590f3182 Christian Gromm 2019-03-21 529 list_del(&group->list); 590f3182 Christian Gromm 2019-03-21 530 kfree(group); 590f3182 Christian Gromm 2019-03-21 531 } 590f3182 Christian Gromm 2019-03-21 532 590f3182 Christian Gromm 2019-03-21 533 static struct configfs_item_operations most_snd_grp_item_ops = { 590f3182 Christian Gromm 2019-03-21 534 .release = most_snd_grp_release, 590f3182 Christian Gromm 2019-03-21 535 }; 590f3182 Christian Gromm 2019-03-21 536 590f3182 Christian Gromm 2019-03-21 537 static struct configfs_group_operations most_snd_grp_group_ops = { 590f3182 Christian Gromm 2019-03-21 538 .make_item = most_snd_grp_make_item, 590f3182 Christian Gromm 2019-03-21 539 }; 590f3182 Christian Gromm 2019-03-21 540 590f3182 Christian Gromm 2019-03-21 541 static const struct config_item_type most_snd_grp_type = { 590f3182 Christian Gromm 2019-03-21 542 .ct_item_ops = &most_snd_grp_item_ops, 590f3182 Christian Gromm 2019-03-21 543 .ct_group_ops = &most_snd_grp_group_ops, 590f3182 Christian Gromm 2019-03-21 544 .ct_attrs = most_snd_grp_attrs, 590f3182 Christian Gromm 2019-03-21 545 .ct_owner = THIS_MODULE, 590f3182 Christian Gromm 2019-03-21 546 }; 590f3182 Christian Gromm 2019-03-21 547 590f3182 Christian Gromm 2019-03-21 548 struct most_sound { 590f3182 Christian Gromm 2019-03-21 549 struct configfs_subsystem subsys; 590f3182 Christian Gromm 2019-03-21 550 struct list_head soundcard_list; 590f3182 Christian Gromm 2019-03-21 551 }; 590f3182 Christian Gromm 2019-03-21 552 590f3182 Christian Gromm 2019-03-21 553 static inline struct most_sound *to_most_sound(struct config_item *item) 590f3182 Christian Gromm 2019-03-21 554 { 590f3182 Christian Gromm 2019-03-21 555 return item ? container_of(to_configfs_subsystem(to_config_group(item)), 590f3182 Christian Gromm 2019-03-21 556 struct most_sound, subsys) : NULL; 590f3182 Christian Gromm 2019-03-21 557 } 590f3182 Christian Gromm 2019-03-21 558 590f3182 Christian Gromm 2019-03-21 559 static struct config_group *most_sound_make_group(struct config_group *group, 590f3182 Christian Gromm 2019-03-21 560 const char *name) 590f3182 Christian Gromm 2019-03-21 561 { 590f3182 Christian Gromm 2019-03-21 562 struct most_snd_grp *most; 590f3182 Christian Gromm 2019-03-21 563 struct most_sound *ms = container_of(to_configfs_subsystem(group), 590f3182 Christian Gromm 2019-03-21 564 struct most_sound, subsys); 590f3182 Christian Gromm 2019-03-21 565 590f3182 Christian Gromm 2019-03-21 566 list_for_each_entry(most, &ms->soundcard_list, list) { 590f3182 Christian Gromm 2019-03-21 567 if (!most->create) { 590f3182 Christian Gromm 2019-03-21 568 pr_info("adapter configuration still in progress.\n"); 590f3182 Christian Gromm 2019-03-21 569 return ERR_PTR(-EPROTO); 590f3182 Christian Gromm 2019-03-21 570 } 590f3182 Christian Gromm 2019-03-21 571 } 590f3182 Christian Gromm 2019-03-21 572 most = kzalloc(sizeof(*most), GFP_KERNEL); 590f3182 Christian Gromm 2019-03-21 573 if (!most) 590f3182 Christian Gromm 2019-03-21 574 return ERR_PTR(-ENOMEM); 590f3182 Christian Gromm 2019-03-21 575 590f3182 Christian Gromm 2019-03-21 @576 config_group_init_type_name(&most->group, name, &most_snd_grp_type); 590f3182 Christian Gromm 2019-03-21 577 list_add_tail(&most->list, &ms->soundcard_list); 590f3182 Christian Gromm 2019-03-21 578 return &most->group; 590f3182 Christian Gromm 2019-03-21 579 } 590f3182 Christian Gromm 2019-03-21 580 590f3182 Christian Gromm 2019-03-21 581 static struct configfs_group_operations most_sound_group_ops = { 590f3182 Christian Gromm 2019-03-21 582 .make_group = most_sound_make_group, 590f3182 Christian Gromm 2019-03-21 583 }; 590f3182 Christian Gromm 2019-03-21 584 590f3182 Christian Gromm 2019-03-21 585 static const struct config_item_type most_sound_type = { 590f3182 Christian Gromm 2019-03-21 586 .ct_group_ops = &most_sound_group_ops, 590f3182 Christian Gromm 2019-03-21 587 .ct_owner = THIS_MODULE, 590f3182 Christian Gromm 2019-03-21 588 }; 590f3182 Christian Gromm 2019-03-21 589 590f3182 Christian Gromm 2019-03-21 590 static struct most_sound most_sound_subsys = { 590f3182 Christian Gromm 2019-03-21 591 .subsys = { 590f3182 Christian Gromm 2019-03-21 592 .su_group = { 590f3182 Christian Gromm 2019-03-21 593 .cg_item = { 590f3182 Christian Gromm 2019-03-21 594 .ci_namebuf = "most_sound", 590f3182 Christian Gromm 2019-03-21 595 .ci_type = &most_sound_type, 590f3182 Christian Gromm 2019-03-21 596 }, 590f3182 Christian Gromm 2019-03-21 597 }, 590f3182 Christian Gromm 2019-03-21 598 }, 590f3182 Christian Gromm 2019-03-21 599 }; 590f3182 Christian Gromm 2019-03-21 600 590f3182 Christian Gromm 2019-03-21 601 int most_register_configfs_subsys(struct core_component *c) 590f3182 Christian Gromm 2019-03-21 602 { 590f3182 Christian Gromm 2019-03-21 603 int ret; 590f3182 Christian Gromm 2019-03-21 604 590f3182 Christian Gromm 2019-03-21 605 if (!strcmp(c->name, "cdev")) 590f3182 Christian Gromm 2019-03-21 @606 ret = configfs_register_subsystem(&most_cdev_subsys); 590f3182 Christian Gromm 2019-03-21 607 else if (!strcmp(c->name, "net")) 590f3182 Christian Gromm 2019-03-21 @608 ret = configfs_register_subsystem(&most_net_subsys); 590f3182 Christian Gromm 2019-03-21 609 else if (!strcmp(c->name, "video")) 590f3182 Christian Gromm 2019-03-21 610 ret = configfs_register_subsystem(&most_video_subsys); 590f3182 Christian Gromm 2019-03-21 611 else if (!strcmp(c->name, "sound")) 590f3182 Christian Gromm 2019-03-21 612 ret = configfs_register_subsystem(&most_sound_subsys.subsys); 590f3182 Christian Gromm 2019-03-21 613 else 590f3182 Christian Gromm 2019-03-21 614 return -ENODEV; 590f3182 Christian Gromm 2019-03-21 615 590f3182 Christian Gromm 2019-03-21 616 if (ret) { 590f3182 Christian Gromm 2019-03-21 617 pr_err("Error %d while registering subsystem %s\n", 590f3182 Christian Gromm 2019-03-21 618 ret, 590f3182 Christian Gromm 2019-03-21 619 most_sound_subsys.subsys.su_group.cg_item.ci_namebuf); 590f3182 Christian Gromm 2019-03-21 620 } 590f3182 Christian Gromm 2019-03-21 621 return ret; 590f3182 Christian Gromm 2019-03-21 622 } 590f3182 Christian Gromm 2019-03-21 623 EXPORT_SYMBOL_GPL(most_register_configfs_subsys); 590f3182 Christian Gromm 2019-03-21 624 590f3182 Christian Gromm 2019-03-21 625 void most_deregister_configfs_subsys(struct core_component *c) 590f3182 Christian Gromm 2019-03-21 626 { 590f3182 Christian Gromm 2019-03-21 627 if (!strcmp(c->name, "cdev")) 590f3182 Christian Gromm 2019-03-21 @628 configfs_unregister_subsystem(&most_cdev_subsys); 590f3182 Christian Gromm 2019-03-21 629 else if (!strcmp(c->name, "net")) 590f3182 Christian Gromm 2019-03-21 630 configfs_unregister_subsystem(&most_net_subsys); 590f3182 Christian Gromm 2019-03-21 631 else if (!strcmp(c->name, "video")) 590f3182 Christian Gromm 2019-03-21 632 configfs_unregister_subsystem(&most_video_subsys); 590f3182 Christian Gromm 2019-03-21 633 else if (!strcmp(c->name, "sound")) 590f3182 Christian Gromm 2019-03-21 634 configfs_unregister_subsystem(&most_sound_subsys.subsys); 590f3182 Christian Gromm 2019-03-21 635 } 590f3182 Christian Gromm 2019-03-21 636 EXPORT_SYMBOL_GPL(most_deregister_configfs_subsys); 590f3182 Christian Gromm 2019-03-21 637 590f3182 Christian Gromm 2019-03-21 638 int __init configfs_init(void) 590f3182 Christian Gromm 2019-03-21 639 { 590f3182 Christian Gromm 2019-03-21 @640 config_group_init(&most_cdev_subsys.su_group); 590f3182 Christian Gromm 2019-03-21 641 mutex_init(&most_cdev_subsys.su_mutex); 590f3182 Christian Gromm 2019-03-21 642 590f3182 Christian Gromm 2019-03-21 643 config_group_init(&most_net_subsys.su_group); 590f3182 Christian Gromm 2019-03-21 644 mutex_init(&most_net_subsys.su_mutex); 590f3182 Christian Gromm 2019-03-21 645 590f3182 Christian Gromm 2019-03-21 646 config_group_init(&most_video_subsys.su_group); 590f3182 Christian Gromm 2019-03-21 647 mutex_init(&most_video_subsys.su_mutex); 590f3182 Christian Gromm 2019-03-21 648 590f3182 Christian Gromm 2019-03-21 649 config_group_init(&most_sound_subsys.subsys.su_group); 590f3182 Christian Gromm 2019-03-21 650 mutex_init(&most_sound_subsys.subsys.su_mutex); 590f3182 Christian Gromm 2019-03-21 651 590f3182 Christian Gromm 2019-03-21 652 INIT_LIST_HEAD(&most_sound_subsys.soundcard_list); 590f3182 Christian Gromm 2019-03-21 653 590f3182 Christian Gromm 2019-03-21 654 return 0; 590f3182 Christian Gromm 2019-03-21 655 } 590f3182 Christian Gromm 2019-03-21 656 :::::: The code at line 484 was first introduced by commit :::::: 590f31828d2a264c02bc4eeebb6722c906aa0444 staging: most: add new file configfs.c :::::: TO: Christian Gromm <christian.gromm@xxxxxxxxxxxxx> :::::: CC: 0day robot <lkp@xxxxxxxxx> --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
Attachment:
.config.gz
Description: application/gzip
_______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel