[mingo-tip:sched/headers 2040/2384] arch/mips/kernel/vpe-mt.c:322:21: error: variable has incomplete type 'struct class'

From: kernel test robot
Date: Sat Jan 15 2022 - 14:24:36 EST


tree: git://git.kernel.org/pub/scm/linux/kernel/git/mingo/tip.git sched/headers
head: 4c707c1c0de83967079b4e385012fa5b00e2cd11
commit: abe1ece6c06895bf5e7c8f03d10061f5712d8326 [2040/2384] headers/deps: dev/core: Optimize <linux/device.h> dependencies, remove <linux/device_api.h> inclusion
config: mips-maltaaprp_defconfig (https://download.01.org/0day-ci/archive/20220116/202201160353.tvHYOOaJ-lkp@xxxxxxxxx/config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 650fc40b6d8d9a5869b4fca525d5f237b0ee2803)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# install mips cross compiling tool for clang build
# apt-get install binutils-mips-linux-gnu
# https://git.kernel.org/pub/scm/linux/kernel/git/mingo/tip.git/commit/?id=abe1ece6c06895bf5e7c8f03d10061f5712d8326
git remote add mingo-tip git://git.kernel.org/pub/scm/linux/kernel/git/mingo/tip.git
git fetch --no-tags mingo-tip sched/headers
git checkout abe1ece6c06895bf5e7c8f03d10061f5712d8326
# save the config file to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=mips SHELL=/bin/bash

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@xxxxxxxxx>

All errors (new ones prefixed by >>):

In file included from arch/mips/kernel/vpe-mt.c:9:
include/linux/fs_api.h:35:19: error: expected ';' after top level declarator
extern void __init inode_init(void);
^
;
include/linux/fs_api.h:36:19: error: expected ';' after top level declarator
extern void __init inode_init_early(void);
^
;
include/linux/fs_api.h:37:19: error: expected ';' after top level declarator
extern void __init files_init(void);
^
;
include/linux/fs_api.h:38:19: error: expected ';' after top level declarator
extern void __init files_maxfiles_init(void);
^
;
include/linux/fs_api.h:1247:19: error: expected ';' after top level declarator
extern void __init vfs_caches_init_early(void);
^
;
include/linux/fs_api.h:1248:19: error: expected ';' after top level declarator
extern void __init vfs_caches_init(void);
^
;
include/linux/fs_api.h:2042:5: error: redefinition of '__init' with a different type: 'int' vs 'void'
int __init list_bdev_fs_names(char *buf, size_t size);
^
include/linux/fs_api.h:1248:13: note: previous declaration is here
extern void __init vfs_caches_init(void);
^
include/linux/fs_api.h:2042:11: error: expected ';' after top level declarator
int __init list_bdev_fs_names(char *buf, size_t size);
^
;
arch/mips/kernel/vpe-mt.c:181:7: warning: no previous prototype for function 'vpe_alloc' [-Wmissing-prototypes]
void *vpe_alloc(void)
^
arch/mips/kernel/vpe-mt.c:181:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
void *vpe_alloc(void)
^
static
arch/mips/kernel/vpe-mt.c:199:5: warning: no previous prototype for function 'vpe_start' [-Wmissing-prototypes]
int vpe_start(void *vpe, unsigned long start)
^
arch/mips/kernel/vpe-mt.c:199:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
int vpe_start(void *vpe, unsigned long start)
^
static
arch/mips/kernel/vpe-mt.c:209:5: warning: no previous prototype for function 'vpe_stop' [-Wmissing-prototypes]
int vpe_stop(void *vpe)
^
arch/mips/kernel/vpe-mt.c:209:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
int vpe_stop(void *vpe)
^
static
arch/mips/kernel/vpe-mt.c:230:5: warning: no previous prototype for function 'vpe_free' [-Wmissing-prototypes]
int vpe_free(void *vpe)
^
arch/mips/kernel/vpe-mt.c:230:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
int vpe_free(void *vpe)
^
static
>> arch/mips/kernel/vpe-mt.c:322:21: error: variable has incomplete type 'struct class'
static struct class vpe_class = {
^
include/linux/device_types.h:29:8: note: forward declaration of 'struct class'
struct class;
^
>> arch/mips/kernel/vpe-mt.c:364:8: error: implicit declaration of function 'class_register' [-Werror,-Wimplicit-function-declaration]
err = class_register(&vpe_class);
^
>> arch/mips/kernel/vpe-mt.c:503:2: error: implicit declaration of function 'class_unregister' [-Werror,-Wimplicit-function-declaration]
class_unregister(&vpe_class);
^
arch/mips/kernel/vpe-mt.c:503:2: note: did you mean 'class_register'?
arch/mips/kernel/vpe-mt.c:364:8: note: 'class_register' declared here
err = class_register(&vpe_class);
^
arch/mips/kernel/vpe-mt.c:516:2: error: implicit declaration of function 'class_unregister' [-Werror,-Wimplicit-function-declaration]
class_unregister(&vpe_class);
^
4 warnings and 12 errors generated.


vim +322 arch/mips/kernel/vpe-mt.c

1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 321
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 @322 static struct class vpe_class = {
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 323 .name = "vpe",
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 324 .owner = THIS_MODULE,
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 325 .dev_release = vpe_device_release,
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 326 .dev_groups = vpe_groups,
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 327 };
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 328
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 329 static struct device vpe_device;
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 330
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 331 int __init vpe_module_init(void)
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 332 {
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 333 unsigned int mtflags, vpflags;
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 334 unsigned long flags, val;
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 335 struct vpe *v = NULL;
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 336 struct tc *t;
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 337 int tc, err;
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 338
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 339 if (!cpu_has_mipsmt) {
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 340 pr_warn("VPE loader: not a MIPS MT capable processor\n");
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 341 return -ENODEV;
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 342 }
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 343
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 344 if (vpelimit == 0) {
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 345 pr_warn("No VPEs reserved for AP/SP, not initialize VPE loader\n"
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 346 "Pass maxvpes=<n> argument as kernel argument\n");
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 347
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 348 return -ENODEV;
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 349 }
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 350
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 351 if (aprp_cpu_index() == 0) {
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 352 pr_warn("No TCs reserved for AP/SP, not initialize VPE loader\n"
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 353 "Pass maxtcs=<n> argument as kernel argument\n");
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 354
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 355 return -ENODEV;
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 356 }
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 357
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 358 major = register_chrdev(0, VPE_MODULE_NAME, &vpe_fops);
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 359 if (major < 0) {
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 360 pr_warn("VPE loader: unable to register character device\n");
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 361 return major;
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 362 }
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 363
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 @364 err = class_register(&vpe_class);
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 365 if (err) {
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 366 pr_err("vpe_class registration failed\n");
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 367 goto out_chrdev;
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 368 }
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 369
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 370 device_initialize(&vpe_device);
3a845b30bc43d7 Zheng Yongjun 2020-12-16 371 vpe_device.class = &vpe_class;
3a845b30bc43d7 Zheng Yongjun 2020-12-16 372 vpe_device.parent = NULL;
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 373 dev_set_name(&vpe_device, "vpe1");
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 374 vpe_device.devt = MKDEV(major, VPE_MODULE_MINOR);
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 375 err = device_add(&vpe_device);
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 376 if (err) {
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 377 pr_err("Adding vpe_device failed\n");
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 378 goto out_class;
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 379 }
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 380
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 381 local_irq_save(flags);
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 382 mtflags = dmt();
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 383 vpflags = dvpe();
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 384
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 385 /* Put MVPE's into 'configuration state' */
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 386 set_c0_mvpcontrol(MVPCONTROL_VPC);
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 387
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 388 val = read_c0_mvpconf0();
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 389 hw_tcs = (val & MVPCONF0_PTC) + 1;
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 390 hw_vpes = ((val & MVPCONF0_PVPE) >> MVPCONF0_PVPE_SHIFT) + 1;
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 391
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 392 for (tc = aprp_cpu_index(); tc < hw_tcs; tc++) {
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 393 /*
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 394 * Must re-enable multithreading temporarily or in case we
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 395 * reschedule send IPIs or similar we might hang.
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 396 */
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 397 clear_c0_mvpcontrol(MVPCONTROL_VPC);
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 398 evpe(vpflags);
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 399 emt(mtflags);
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 400 local_irq_restore(flags);
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 401 t = alloc_tc(tc);
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 402 if (!t) {
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 403 err = -ENOMEM;
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 404 goto out_dev;
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 405 }
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 406
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 407 local_irq_save(flags);
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 408 mtflags = dmt();
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 409 vpflags = dvpe();
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 410 set_c0_mvpcontrol(MVPCONTROL_VPC);
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 411
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 412 /* VPE's */
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 413 if (tc < hw_tcs) {
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 414 settc(tc);
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 415
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 416 v = alloc_vpe(tc);
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 417 if (v == NULL) {
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 418 pr_warn("VPE: unable to allocate VPE\n");
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 419 goto out_reenable;
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 420 }
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 421
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 422 v->ntcs = hw_tcs - aprp_cpu_index();
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 423
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 424 /* add the tc to the list of this vpe's tc's. */
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 425 list_add(&t->tc, &v->tc);
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 426
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 427 /* deactivate all but vpe0 */
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 428 if (tc >= aprp_cpu_index()) {
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 429 unsigned long tmp = read_vpe_c0_vpeconf0();
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 430
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 431 tmp &= ~VPECONF0_VPA;
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 432
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 433 /* master VPE */
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 434 tmp |= VPECONF0_MVP;
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 435 write_vpe_c0_vpeconf0(tmp);
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 436 }
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 437
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 438 /* disable multi-threading with TC's */
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 439 write_vpe_c0_vpecontrol(read_vpe_c0_vpecontrol() &
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 440 ~VPECONTROL_TE);
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 441
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 442 if (tc >= vpelimit) {
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 443 /*
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 444 * Set config to be the same as vpe0,
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 445 * particularly kseg0 coherency alg
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 446 */
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 447 write_vpe_c0_config(read_c0_config());
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 448 }
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 449 }
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 450
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 451 /* TC's */
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 452 t->pvpe = v; /* set the parent vpe */
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 453
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 454 if (tc >= aprp_cpu_index()) {
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 455 unsigned long tmp;
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 456
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 457 settc(tc);
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 458
b633648c5ad3cf Ralf Baechle 2014-05-23 459 /*
b633648c5ad3cf Ralf Baechle 2014-05-23 460 * A TC that is bound to any other VPE gets bound to
b633648c5ad3cf Ralf Baechle 2014-05-23 461 * VPE0, ideally I'd like to make it homeless but it
b633648c5ad3cf Ralf Baechle 2014-05-23 462 * doesn't appear to let me bind a TC to a non-existent
b633648c5ad3cf Ralf Baechle 2014-05-23 463 * VPE. Which is perfectly reasonable.
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 464 *
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 465 * The (un)bound state is visible to an EJTAG probe so
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 466 * may notify GDB...
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 467 */
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 468 tmp = read_tc_c0_tcbind();
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 469 if (tmp & TCBIND_CURVPE) {
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 470 /* tc is bound >vpe0 */
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 471 write_tc_c0_tcbind(tmp & ~TCBIND_CURVPE);
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 472
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 473 t->pvpe = get_vpe(0); /* set the parent vpe */
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 474 }
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 475
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 476 /* halt the TC */
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 477 write_tc_c0_tchalt(TCHALT_H);
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 478 mips_ihb();
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 479
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 480 tmp = read_tc_c0_tcstatus();
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 481
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 482 /* mark not activated and not dynamically allocatable */
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 483 tmp &= ~(TCSTATUS_A | TCSTATUS_DA);
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 484 tmp |= TCSTATUS_IXMT; /* interrupt exempt */
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 485 write_tc_c0_tcstatus(tmp);
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 486 }
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 487 }
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 488
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 489 out_reenable:
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 490 /* release config state */
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 491 clear_c0_mvpcontrol(MVPCONTROL_VPC);
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 492
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 493 evpe(vpflags);
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 494 emt(mtflags);
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 495 local_irq_restore(flags);
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 496
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 497 return 0;
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 498
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 499 out_dev:
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 500 device_del(&vpe_device);
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 501
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 502 out_class:
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 @503 class_unregister(&vpe_class);
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 504
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 505 out_chrdev:
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 506 unregister_chrdev(major, VPE_MODULE_NAME);
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 507
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 508 return err;
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 509 }
1a2a6d7e8816ed Dengcheng Zhu 2013-10-30 510

:::::: The code at line 322 was first introduced by commit
:::::: 1a2a6d7e8816ed2b2679a0c4f7ba4019cd31dd62 MIPS: APRP: Split VPE loader into separate files.

:::::: TO: Deng-Cheng Zhu <dengcheng.zhu@xxxxxxxxxx>
:::::: CC: Ralf Baechle <ralf@xxxxxxxxxxxxxx>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx