aboutsummaryrefslogtreecommitdiffstats
path: root/init
diff options
context:
space:
mode:
Diffstat (limited to 'init')
-rw-r--r--init/Kconfig113
-rw-r--r--init/do_mounts.c6
-rw-r--r--init/main.c39
-rw-r--r--init/version.c5
4 files changed, 76 insertions, 87 deletions
diff --git a/init/Kconfig b/init/Kconfig
index 2081a4d3d917..f5dbc6d4261b 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -470,17 +470,15 @@ choice
470config TREE_RCU 470config TREE_RCU
471 bool "Tree-based hierarchical RCU" 471 bool "Tree-based hierarchical RCU"
472 depends on !PREEMPT && SMP 472 depends on !PREEMPT && SMP
473 select IRQ_WORK
474 help 473 help
475 This option selects the RCU implementation that is 474 This option selects the RCU implementation that is
476 designed for very large SMP system with hundreds or 475 designed for very large SMP system with hundreds or
477 thousands of CPUs. It also scales down nicely to 476 thousands of CPUs. It also scales down nicely to
478 smaller systems. 477 smaller systems.
479 478
480config TREE_PREEMPT_RCU 479config PREEMPT_RCU
481 bool "Preemptible tree-based hierarchical RCU" 480 bool "Preemptible tree-based hierarchical RCU"
482 depends on PREEMPT 481 depends on PREEMPT
483 select IRQ_WORK
484 help 482 help
485 This option selects the RCU implementation that is 483 This option selects the RCU implementation that is
486 designed for very large SMP systems with hundreds or 484 designed for very large SMP systems with hundreds or
@@ -501,15 +499,17 @@ config TINY_RCU
501 499
502endchoice 500endchoice
503 501
504config PREEMPT_RCU 502config SRCU
505 def_bool TREE_PREEMPT_RCU 503 bool
506 help 504 help
507 This option enables preemptible-RCU code that is common between 505 This option selects the sleepable version of RCU. This version
508 TREE_PREEMPT_RCU and, in the old days, TINY_PREEMPT_RCU. 506 permits arbitrary sleeping or blocking within RCU read-side critical
507 sections.
509 508
510config TASKS_RCU 509config TASKS_RCU
511 bool "Task_based RCU implementation using voluntary context switch" 510 bool "Task_based RCU implementation using voluntary context switch"
512 default n 511 default n
512 select SRCU
513 help 513 help
514 This option enables a task-based RCU implementation that uses 514 This option enables a task-based RCU implementation that uses
515 only voluntary context switch (not preemption!), idle, and 515 only voluntary context switch (not preemption!), idle, and
@@ -518,7 +518,7 @@ config TASKS_RCU
518 If unsure, say N. 518 If unsure, say N.
519 519
520config RCU_STALL_COMMON 520config RCU_STALL_COMMON
521 def_bool ( TREE_RCU || TREE_PREEMPT_RCU || RCU_TRACE ) 521 def_bool ( TREE_RCU || PREEMPT_RCU || RCU_TRACE )
522 help 522 help
523 This option enables RCU CPU stall code that is common between 523 This option enables RCU CPU stall code that is common between
524 the TINY and TREE variants of RCU. The purpose is to allow 524 the TINY and TREE variants of RCU. The purpose is to allow
@@ -576,7 +576,7 @@ config RCU_FANOUT
576 int "Tree-based hierarchical RCU fanout value" 576 int "Tree-based hierarchical RCU fanout value"
577 range 2 64 if 64BIT 577 range 2 64 if 64BIT
578 range 2 32 if !64BIT 578 range 2 32 if !64BIT
579 depends on TREE_RCU || TREE_PREEMPT_RCU 579 depends on TREE_RCU || PREEMPT_RCU
580 default 64 if 64BIT 580 default 64 if 64BIT
581 default 32 if !64BIT 581 default 32 if !64BIT
582 help 582 help
@@ -596,7 +596,7 @@ config RCU_FANOUT_LEAF
596 int "Tree-based hierarchical RCU leaf-level fanout value" 596 int "Tree-based hierarchical RCU leaf-level fanout value"
597 range 2 RCU_FANOUT if 64BIT 597 range 2 RCU_FANOUT if 64BIT
598 range 2 RCU_FANOUT if !64BIT 598 range 2 RCU_FANOUT if !64BIT
599 depends on TREE_RCU || TREE_PREEMPT_RCU 599 depends on TREE_RCU || PREEMPT_RCU
600 default 16 600 default 16
601 help 601 help
602 This option controls the leaf-level fanout of hierarchical 602 This option controls the leaf-level fanout of hierarchical
@@ -621,7 +621,7 @@ config RCU_FANOUT_LEAF
621 621
622config RCU_FANOUT_EXACT 622config RCU_FANOUT_EXACT
623 bool "Disable tree-based hierarchical RCU auto-balancing" 623 bool "Disable tree-based hierarchical RCU auto-balancing"
624 depends on TREE_RCU || TREE_PREEMPT_RCU 624 depends on TREE_RCU || PREEMPT_RCU
625 default n 625 default n
626 help 626 help
627 This option forces use of the exact RCU_FANOUT value specified, 627 This option forces use of the exact RCU_FANOUT value specified,
@@ -652,11 +652,11 @@ config RCU_FAST_NO_HZ
652 Say N if you are unsure. 652 Say N if you are unsure.
653 653
654config TREE_RCU_TRACE 654config TREE_RCU_TRACE
655 def_bool RCU_TRACE && ( TREE_RCU || TREE_PREEMPT_RCU ) 655 def_bool RCU_TRACE && ( TREE_RCU || PREEMPT_RCU )
656 select DEBUG_FS 656 select DEBUG_FS
657 help 657 help
658 This option provides tracing for the TREE_RCU and 658 This option provides tracing for the TREE_RCU and
659 TREE_PREEMPT_RCU implementations, permitting Makefile to 659 PREEMPT_RCU implementations, permitting Makefile to
660 trivially select kernel/rcutree_trace.c. 660 trivially select kernel/rcutree_trace.c.
661 661
662config RCU_BOOST 662config RCU_BOOST
@@ -672,30 +672,32 @@ config RCU_BOOST
672 Say Y here if you are working with real-time apps or heavy loads 672 Say Y here if you are working with real-time apps or heavy loads
673 Say N here if you are unsure. 673 Say N here if you are unsure.
674 674
675config RCU_BOOST_PRIO 675config RCU_KTHREAD_PRIO
676 int "Real-time priority to boost RCU readers to" 676 int "Real-time priority to use for RCU worker threads"
677 range 1 99 677 range 1 99 if RCU_BOOST
678 depends on RCU_BOOST 678 range 0 99 if !RCU_BOOST
679 default 1 679 default 1 if RCU_BOOST
680 help 680 default 0 if !RCU_BOOST
681 This option specifies the real-time priority to which long-term 681 help
682 preempted RCU readers are to be boosted. If you are working 682 This option specifies the SCHED_FIFO priority value that will be
683 with a real-time application that has one or more CPU-bound 683 assigned to the rcuc/n and rcub/n threads and is also the value
684 threads running at a real-time priority level, you should set 684 used for RCU_BOOST (if enabled). If you are working with a
685 RCU_BOOST_PRIO to a priority higher then the highest-priority 685 real-time application that has one or more CPU-bound threads
686 real-time CPU-bound thread. The default RCU_BOOST_PRIO value 686 running at a real-time priority level, you should set
687 of 1 is appropriate in the common case, which is real-time 687 RCU_KTHREAD_PRIO to a priority higher than the highest-priority
688 real-time CPU-bound application thread. The default RCU_KTHREAD_PRIO
689 value of 1 is appropriate in the common case, which is real-time
688 applications that do not have any CPU-bound threads. 690 applications that do not have any CPU-bound threads.
689 691
690 Some real-time applications might not have a single real-time 692 Some real-time applications might not have a single real-time
691 thread that saturates a given CPU, but instead might have 693 thread that saturates a given CPU, but instead might have
692 multiple real-time threads that, taken together, fully utilize 694 multiple real-time threads that, taken together, fully utilize
693 that CPU. In this case, you should set RCU_BOOST_PRIO to 695 that CPU. In this case, you should set RCU_KTHREAD_PRIO to
694 a priority higher than the lowest-priority thread that is 696 a priority higher than the lowest-priority thread that is
695 conspiring to prevent the CPU from running any non-real-time 697 conspiring to prevent the CPU from running any non-real-time
696 tasks. For example, if one thread at priority 10 and another 698 tasks. For example, if one thread at priority 10 and another
697 thread at priority 5 are between themselves fully consuming 699 thread at priority 5 are between themselves fully consuming
698 the CPU time on a given CPU, then RCU_BOOST_PRIO should be 700 the CPU time on a given CPU, then RCU_KTHREAD_PRIO should be
699 set to priority 6 or higher. 701 set to priority 6 or higher.
700 702
701 Specify the real-time priority, or take the default if unsure. 703 Specify the real-time priority, or take the default if unsure.
@@ -715,7 +717,7 @@ config RCU_BOOST_DELAY
715 717
716config RCU_NOCB_CPU 718config RCU_NOCB_CPU
717 bool "Offload RCU callback processing from boot-selected CPUs" 719 bool "Offload RCU callback processing from boot-selected CPUs"
718 depends on TREE_RCU || TREE_PREEMPT_RCU 720 depends on TREE_RCU || PREEMPT_RCU
719 default n 721 default n
720 help 722 help
721 Use this option to reduce OS jitter for aggressive HPC or 723 Use this option to reduce OS jitter for aggressive HPC or
@@ -739,6 +741,7 @@ config RCU_NOCB_CPU
739choice 741choice
740 prompt "Build-forced no-CBs CPUs" 742 prompt "Build-forced no-CBs CPUs"
741 default RCU_NOCB_CPU_NONE 743 default RCU_NOCB_CPU_NONE
744 depends on RCU_NOCB_CPU
742 help 745 help
743 This option allows no-CBs CPUs (whose RCU callbacks are invoked 746 This option allows no-CBs CPUs (whose RCU callbacks are invoked
744 from kthreads rather than from softirq context) to be specified 747 from kthreads rather than from softirq context) to be specified
@@ -747,7 +750,6 @@ choice
747 750
748config RCU_NOCB_CPU_NONE 751config RCU_NOCB_CPU_NONE
749 bool "No build_forced no-CBs CPUs" 752 bool "No build_forced no-CBs CPUs"
750 depends on RCU_NOCB_CPU
751 help 753 help
752 This option does not force any of the CPUs to be no-CBs CPUs. 754 This option does not force any of the CPUs to be no-CBs CPUs.
753 Only CPUs designated by the rcu_nocbs= boot parameter will be 755 Only CPUs designated by the rcu_nocbs= boot parameter will be
@@ -761,7 +763,6 @@ config RCU_NOCB_CPU_NONE
761 763
762config RCU_NOCB_CPU_ZERO 764config RCU_NOCB_CPU_ZERO
763 bool "CPU 0 is a build_forced no-CBs CPU" 765 bool "CPU 0 is a build_forced no-CBs CPU"
764 depends on RCU_NOCB_CPU
765 help 766 help
766 This option forces CPU 0 to be a no-CBs CPU, so that its RCU 767 This option forces CPU 0 to be a no-CBs CPU, so that its RCU
767 callbacks are invoked by a per-CPU kthread whose name begins 768 callbacks are invoked by a per-CPU kthread whose name begins
@@ -776,7 +777,6 @@ config RCU_NOCB_CPU_ZERO
776 777
777config RCU_NOCB_CPU_ALL 778config RCU_NOCB_CPU_ALL
778 bool "All CPUs are build_forced no-CBs CPUs" 779 bool "All CPUs are build_forced no-CBs CPUs"
779 depends on RCU_NOCB_CPU
780 help 780 help
781 This option forces all CPUs to be no-CBs CPUs. The rcu_nocbs= 781 This option forces all CPUs to be no-CBs CPUs. The rcu_nocbs=
782 boot parameter will be ignored. All CPUs' RCU callbacks will 782 boot parameter will be ignored. All CPUs' RCU callbacks will
@@ -900,14 +900,6 @@ config ARCH_SUPPORTS_INT128
900config ARCH_WANT_NUMA_VARIABLE_LOCALITY 900config ARCH_WANT_NUMA_VARIABLE_LOCALITY
901 bool 901 bool
902 902
903config NUMA_BALANCING_DEFAULT_ENABLED
904 bool "Automatically enable NUMA aware memory/task placement"
905 default y
906 depends on NUMA_BALANCING
907 help
908 If set, automatic NUMA balancing will be enabled if running on a NUMA
909 machine.
910
911config NUMA_BALANCING 903config NUMA_BALANCING
912 bool "Memory placement aware NUMA scheduler" 904 bool "Memory placement aware NUMA scheduler"
913 depends on ARCH_SUPPORTS_NUMA_BALANCING 905 depends on ARCH_SUPPORTS_NUMA_BALANCING
@@ -920,8 +912,16 @@ config NUMA_BALANCING
920 912
921 This system will be inactive on UMA systems. 913 This system will be inactive on UMA systems.
922 914
915config NUMA_BALANCING_DEFAULT_ENABLED
916 bool "Automatically enable NUMA aware memory/task placement"
917 default y
918 depends on NUMA_BALANCING
919 help
920 If set, automatic NUMA balancing will be enabled if running on a NUMA
921 machine.
922
923menuconfig CGROUPS 923menuconfig CGROUPS
924 boolean "Control Group support" 924 bool "Control Group support"
925 select KERNFS 925 select KERNFS
926 help 926 help
927 This option adds support for grouping sets of processes together, for 927 This option adds support for grouping sets of processes together, for
@@ -979,32 +979,17 @@ config CGROUP_CPUACCT
979 Provides a simple Resource Controller for monitoring the 979 Provides a simple Resource Controller for monitoring the
980 total CPU consumed by the tasks in a cgroup. 980 total CPU consumed by the tasks in a cgroup.
981 981
982config RESOURCE_COUNTERS 982config PAGE_COUNTER
983 bool "Resource counters" 983 bool
984 help
985 This option enables controller independent resource accounting
986 infrastructure that works with cgroups.
987 984
988config MEMCG 985config MEMCG
989 bool "Memory Resource Controller for Control Groups" 986 bool "Memory Resource Controller for Control Groups"
990 depends on RESOURCE_COUNTERS 987 select PAGE_COUNTER
991 select EVENTFD 988 select EVENTFD
992 help 989 help
993 Provides a memory resource controller that manages both anonymous 990 Provides a memory resource controller that manages both anonymous
994 memory and page cache. (See Documentation/cgroups/memory.txt) 991 memory and page cache. (See Documentation/cgroups/memory.txt)
995 992
996 Note that setting this option increases fixed memory overhead
997 associated with each page of memory in the system. By this,
998 8(16)bytes/PAGE_SIZE on 32(64)bit system will be occupied by memory
999 usage tracking struct at boot. Total amount of this is printed out
1000 at boot.
1001
1002 Only enable when you're ok with these trade offs and really
1003 sure you need the memory resource controller. Even when you enable
1004 this, you can set "cgroup_disable=memory" at your boot option to
1005 disable memory resource controller and you can avoid overheads.
1006 (and lose benefits of memory resource controller)
1007
1008config MEMCG_SWAP 993config MEMCG_SWAP
1009 bool "Memory Resource Controller Swap Extension" 994 bool "Memory Resource Controller Swap Extension"
1010 depends on MEMCG && SWAP 995 depends on MEMCG && SWAP
@@ -1055,7 +1040,8 @@ config MEMCG_KMEM
1055 1040
1056config CGROUP_HUGETLB 1041config CGROUP_HUGETLB
1057 bool "HugeTLB Resource Controller for Control Groups" 1042 bool "HugeTLB Resource Controller for Control Groups"
1058 depends on RESOURCE_COUNTERS && HUGETLB_PAGE 1043 depends on HUGETLB_PAGE
1044 select PAGE_COUNTER
1059 default n 1045 default n
1060 help 1046 help
1061 Provides a cgroup Resource Controller for HugeTLB pages. 1047 Provides a cgroup Resource Controller for HugeTLB pages.
@@ -1304,8 +1290,8 @@ endif
1304config CC_OPTIMIZE_FOR_SIZE 1290config CC_OPTIMIZE_FOR_SIZE
1305 bool "Optimize for size" 1291 bool "Optimize for size"
1306 help 1292 help
1307 Enabling this option will pass "-Os" instead of "-O2" to gcc 1293 Enabling this option will pass "-Os" instead of "-O2" to
1308 resulting in a smaller kernel. 1294 your compiler resulting in a smaller kernel.
1309 1295
1310 If unsure, say N. 1296 If unsure, say N.
1311 1297
@@ -1600,6 +1586,7 @@ config PERF_EVENTS
1600 depends on HAVE_PERF_EVENTS 1586 depends on HAVE_PERF_EVENTS
1601 select ANON_INODES 1587 select ANON_INODES
1602 select IRQ_WORK 1588 select IRQ_WORK
1589 select SRCU
1603 help 1590 help
1604 Enable kernel support for various performance events provided 1591 Enable kernel support for various performance events provided
1605 by software and hardware. 1592 by software and hardware.
@@ -1775,7 +1762,7 @@ config SLABINFO
1775 default y 1762 default y
1776 1763
1777config RT_MUTEXES 1764config RT_MUTEXES
1778 boolean 1765 bool
1779 1766
1780config BASE_SMALL 1767config BASE_SMALL
1781 int 1768 int
diff --git a/init/do_mounts.c b/init/do_mounts.c
index 9b3565c41502..eb410083e8e0 100644
--- a/init/do_mounts.c
+++ b/init/do_mounts.c
@@ -395,8 +395,6 @@ retry:
395 case 0: 395 case 0:
396 goto out; 396 goto out;
397 case -EACCES: 397 case -EACCES:
398 flags |= MS_RDONLY;
399 goto retry;
400 case -EINVAL: 398 case -EINVAL:
401 continue; 399 continue;
402 } 400 }
@@ -419,6 +417,10 @@ retry:
419#endif 417#endif
420 panic("VFS: Unable to mount root fs on %s", b); 418 panic("VFS: Unable to mount root fs on %s", b);
421 } 419 }
420 if (!(flags & MS_RDONLY)) {
421 flags |= MS_RDONLY;
422 goto retry;
423 }
422 424
423 printk("List of all partitions:\n"); 425 printk("List of all partitions:\n");
424 printk_all_partitions(); 426 printk_all_partitions();
diff --git a/init/main.c b/init/main.c
index b0c705515089..54565bf57beb 100644
--- a/init/main.c
+++ b/init/main.c
@@ -51,7 +51,7 @@
51#include <linux/mempolicy.h> 51#include <linux/mempolicy.h>
52#include <linux/key.h> 52#include <linux/key.h>
53#include <linux/buffer_head.h> 53#include <linux/buffer_head.h>
54#include <linux/page_cgroup.h> 54#include <linux/page_ext.h>
55#include <linux/debug_locks.h> 55#include <linux/debug_locks.h>
56#include <linux/debugobjects.h> 56#include <linux/debugobjects.h>
57#include <linux/lockdep.h> 57#include <linux/lockdep.h>
@@ -78,6 +78,8 @@
78#include <linux/context_tracking.h> 78#include <linux/context_tracking.h>
79#include <linux/random.h> 79#include <linux/random.h>
80#include <linux/list.h> 80#include <linux/list.h>
81#include <linux/integrity.h>
82#include <linux/proc_ns.h>
81 83
82#include <asm/io.h> 84#include <asm/io.h>
83#include <asm/bugs.h> 85#include <asm/bugs.h>
@@ -85,10 +87,6 @@
85#include <asm/sections.h> 87#include <asm/sections.h>
86#include <asm/cacheflush.h> 88#include <asm/cacheflush.h>
87 89
88#ifdef CONFIG_X86_LOCAL_APIC
89#include <asm/smp.h>
90#endif
91
92static int kernel_init(void *); 90static int kernel_init(void *);
93 91
94extern void init_IRQ(void); 92extern void init_IRQ(void);
@@ -349,15 +347,6 @@ __setup("rdinit=", rdinit_setup);
349 347
350#ifndef CONFIG_SMP 348#ifndef CONFIG_SMP
351static const unsigned int setup_max_cpus = NR_CPUS; 349static const unsigned int setup_max_cpus = NR_CPUS;
352#ifdef CONFIG_X86_LOCAL_APIC
353static void __init smp_init(void)
354{
355 APIC_init_uniprocessor();
356}
357#else
358#define smp_init() do { } while (0)
359#endif
360
361static inline void setup_nr_cpu_ids(void) { } 350static inline void setup_nr_cpu_ids(void) { }
362static inline void smp_prepare_cpus(unsigned int maxcpus) { } 351static inline void smp_prepare_cpus(unsigned int maxcpus) { }
363#endif 352#endif
@@ -486,10 +475,10 @@ void __init __weak thread_info_cache_init(void)
486static void __init mm_init(void) 475static void __init mm_init(void)
487{ 476{
488 /* 477 /*
489 * page_cgroup requires contiguous pages, 478 * page_ext requires contiguous pages,
490 * bigger than MAX_ORDER unless SPARSEMEM. 479 * bigger than MAX_ORDER unless SPARSEMEM.
491 */ 480 */
492 page_cgroup_init_flatmem(); 481 page_ext_init_flatmem();
493 mem_init(); 482 mem_init();
494 kmem_cache_init(); 483 kmem_cache_init();
495 percpu_init_late(); 484 percpu_init_late();
@@ -577,6 +566,10 @@ asmlinkage __visible void __init start_kernel(void)
577 local_irq_disable(); 566 local_irq_disable();
578 idr_init_cache(); 567 idr_init_cache();
579 rcu_init(); 568 rcu_init();
569
570 /* trace_printk() and trace points may be used after this */
571 trace_init();
572
580 context_tracking_init(); 573 context_tracking_init();
581 radix_tree_init(); 574 radix_tree_init();
582 /* init some links before init_ISA_irqs() */ 575 /* init some links before init_ISA_irqs() */
@@ -627,7 +620,7 @@ asmlinkage __visible void __init start_kernel(void)
627 initrd_start = 0; 620 initrd_start = 0;
628 } 621 }
629#endif 622#endif
630 page_cgroup_init(); 623 page_ext_init();
631 debug_objects_mem_init(); 624 debug_objects_mem_init();
632 kmemleak_init(); 625 kmemleak_init();
633 setup_per_cpu_pageset(); 626 setup_per_cpu_pageset();
@@ -660,8 +653,9 @@ asmlinkage __visible void __init start_kernel(void)
660 /* rootfs populating might need page-writeback */ 653 /* rootfs populating might need page-writeback */
661 page_writeback_init(); 654 page_writeback_init();
662 proc_root_init(); 655 proc_root_init();
663 cgroup_init(); 656 nsfs_init();
664 cpuset_init(); 657 cpuset_init();
658 cgroup_init();
665 taskstats_init_early(); 659 taskstats_init_early();
666 delayacct_init(); 660 delayacct_init();
667 661
@@ -959,8 +953,8 @@ static int __ref kernel_init(void *unused)
959 ret = run_init_process(execute_command); 953 ret = run_init_process(execute_command);
960 if (!ret) 954 if (!ret)
961 return 0; 955 return 0;
962 pr_err("Failed to execute %s (error %d). Attempting defaults...\n", 956 panic("Requested init %s failed (error %d).",
963 execute_command, ret); 957 execute_command, ret);
964 } 958 }
965 if (!try_to_run_init_process("/sbin/init") || 959 if (!try_to_run_init_process("/sbin/init") ||
966 !try_to_run_init_process("/etc/init") || 960 !try_to_run_init_process("/etc/init") ||
@@ -1026,8 +1020,11 @@ static noinline void __init kernel_init_freeable(void)
1026 * Ok, we have completed the initial bootup, and 1020 * Ok, we have completed the initial bootup, and
1027 * we're essentially up and running. Get rid of the 1021 * we're essentially up and running. Get rid of the
1028 * initmem segments and start the user-mode stuff.. 1022 * initmem segments and start the user-mode stuff..
1023 *
1024 * rootfs is available now, try loading the public keys
1025 * and default modules
1029 */ 1026 */
1030 1027
1031 /* rootfs is available now, try loading default modules */ 1028 integrity_load_keys();
1032 load_default_modules(); 1029 load_default_modules();
1033} 1030}
diff --git a/init/version.c b/init/version.c
index 1a4718e500fe..fe41a63efed6 100644
--- a/init/version.c
+++ b/init/version.c
@@ -35,7 +35,10 @@ struct uts_namespace init_uts_ns = {
35 .domainname = UTS_DOMAINNAME, 35 .domainname = UTS_DOMAINNAME,
36 }, 36 },
37 .user_ns = &init_user_ns, 37 .user_ns = &init_user_ns,
38 .proc_inum = PROC_UTS_INIT_INO, 38 .ns.inum = PROC_UTS_INIT_INO,
39#ifdef CONFIG_UTS_NS
40 .ns.ops = &utsns_operations,
41#endif
39}; 42};
40EXPORT_SYMBOL_GPL(init_uts_ns); 43EXPORT_SYMBOL_GPL(init_uts_ns);
41 44