path: root/kernel/ksysfs.c
AgeCommit message (Collapse)AuthorLines
2015-12-07rcu: Remove TINY_RCU bloat from pointless boot parametersPaul E. McKenney-0/+4
The rcu_expedited, rcu_normal, and rcu_normal_after_boot kernel boot parameters are pointless in the case of TINY_RCU because in that case synchronous grace periods, both expedited and normal, are no-ops. However, these three symbols contribute several hundred bytes of bloat. This commit therefore uses CPP directives to avoid compiling this code in TINY_RCU kernels. Reported-by: kbuild test robot <> Signed-off-by: Paul E. McKenney <> Reviewed-by: Josh Triplett <>
2015-12-04rcu: Add rcu_normal kernel parameter to suppress expeditingPaul E. McKenney-2/+20
Although expedited grace periods can be quite useful, and although their OS jitter has been greatly reduced, they can still pose problems for extreme real-time workloads. This commit therefore adds a rcu_normal kernel boot parameter (which can also be manipulated via sysfs) to suppress expedited grace periods, that is, to treat requests for expedited grace periods as if they were requests for normal grace periods. If both rcu_expedited and rcu_normal are specified, rcu_normal wins. This means that if you are relying on expedited grace periods to speed up boot, you will want to specify rcu_expedited on the kernel command line, and then specify rcu_normal via sysfs once boot completes. Signed-off-by: Paul E. McKenney <>
2015-09-10kexec: split kexec_load syscall from kexec core codeDave Young-3/+3
There are two kexec load syscalls, kexec_load another and kexec_file_load. kexec_file_load has been splited as kernel/kexec_file.c. In this patch I split kexec_load syscall code to kernel/kexec.c. And add a new kconfig option KEXEC_CORE, so we can disable kexec_load and use kexec_file_load only, or vice verse. The original requirement is from Ted Ts'o, he want kexec kernel signature being checked with CONFIG_KEXEC_VERIFY_SIG enabled. But kexec-tools use kexec_load syscall can bypass the checking. Vivek Goyal proposed to create a common kconfig option so user can compile in only one syscall for loading kexec kernel. KEXEC/KEXEC_FILE selects KEXEC_CORE so that old config files still work. Because there's general code need CONFIG_KEXEC_CORE, so I updated all the architecture Kconfig with a new option KEXEC_CORE, and let KEXEC selects KEXEC_CORE in arch Kconfig. Also updated general kernel code with to kexec_load syscall. [ coding-style fixes] Signed-off-by: Dave Young <> Cc: Eric W. Biederman <> Cc: Vivek Goyal <> Cc: Petr Tesarik <> Cc: Theodore Ts'o <> Cc: Josh Boyer <> Cc: David Howells <> Cc: Geert Uytterhoeven <> Signed-off-by: Andrew Morton <> Signed-off-by: Linus Torvalds <>
2014-04-25kobject: Make support for uevent_helper optional.Michael Marineau-1/+4
Support for uevent_helper, aka hotplug, is not required on many systems these days but it can still be enabled via sysfs or sysctl. Reported-by: Darren Shepherd <> Signed-off-by: Michael Marineau <> Signed-off-by: Greg Kroah-Hartman <>
2014-04-07kernel: use macros from compiler.h instead of __attribute__((...))Gideon Israel Dsouza-2/+3
To increase compiler portability there is <linux/compiler.h> which provides convenience macros for various gcc constructs. Eg: __weak for __attribute__((weak)). I've replaced all instances of gcc attributes with the right macro in the kernel subsystem. Signed-off-by: Gideon Israel Dsouza <> Cc: "Rafael J. Wysocki" <> Cc: Ingo Molnar <> Signed-off-by: Andrew Morton <> Signed-off-by: Linus Torvalds <>
2014-02-26rcu: Fix sparse warning for rcu_expedited from kernel/ksysfs.cPaul Gortmaker-0/+2
This commit fixes the follwoing warning: kernel/ksysfs.c:143:5: warning: symbol 'rcu_expedited' was not declared. Should it be static? Signed-off-by: Paul Gortmaker <> [ paulmck: Moved the declaration to include/linux/rcupdate.h to avoid including the RCU-internal rcu.h file outside of RCU. ] Signed-off-by: Paul E. McKenney <> Reviewed-by: Josh Triplett <>
2014-01-23kdump: fix exported size of vmcoreinfo noteVivek Goyal-1/+1
Right now we seem to be exporting the max data size contained inside vmcoreinfo note. But this does not include the size of meta data around vmcore info data. Like name of the note and starting and ending elf_note. I think user space expects total size and that size is put in PT_NOTE elf header. Things seem to be fine so far because we are not using vmcoreinfo note to the maximum capacity. But as it starts filling up, to capacity, at some point of time, problem will be visible. I don't think user space will be broken with this change. So there is no need to introduce vmcoreinfo2. This change is safe and backward compatible. More explanation on why this change is safe is below. vmcoreinfo contains information about kernel which user space needs to know to do things like filtering. For example, various kernel config options or information about size or offset of some data structures etc. All this information is commmunicated to user space with an ELF note present in ELF /proc/vmcore file. Currently vmcoreinfo data size is 4096. With some elf note meta data around it, actual size is 4132 bytes. But we are using barely 25% of that size. Rest is empty. So even if we tell user space that size of ELf note is 4096 and not 4132, nothing will be broken becase after around 1000 bytes, everything is zero anyway. But once we start filling up the note to the capacity, and not report the full size of note, bad things will start happening. Either some data will be lost or tools will be confused that they did not fine the zero note at the end. So I think this change is safe and should not break existing tools. Signed-off-by: Vivek Goyal <> Cc: Ken'ichi Ohmichi <> Cc: Dan Aloni <> Cc: Greg KH <> Signed-off-by: Andrew Morton <> Signed-off-by: Linus Torvalds <>
2013-09-12kernel: replace strict_strto*() with kstrto*()Jingoo Han-1/+1
The usage of strict_strto*() is not preferred, because strict_strto*() is obsolete. Thus, kstrto*() should be used. Signed-off-by: Jingoo Han <> Signed-off-by: Andrew Morton <> Signed-off-by: Linus Torvalds <>
2012-12-11Merge branch 'core-rcu-for-linus' of ↵Linus Torvalds-0/+18
git:// Pull RCU update from Ingo Molnar: "The major features of this tree are: 1. A first version of no-callbacks CPUs. This version prohibits offlining CPU 0, but only when enabled via CONFIG_RCU_NOCB_CPU=y. Relaxing this constraint is in progress, but not yet ready for prime time. These commits were posted to LKML at 2. Changes to SRCU that allows statically initialized srcu_struct structures. These commits were posted to LKML at 3. Restructuring of RCU's debugfs output. These commits were posted to LKML at 4. Additional CPU-hotplug/RCU improvements, posted to LKML at Note that the commit eliminating __stop_machine() was judged to be too-high of risk, so is deferred to 3.9. 5. Changes to RCU's idle interface, most notably a new module parameter that redirects normal grace-period operations to their expedited equivalents. These were posted to LKML at 6. Additional diagnostics for RCU's CPU stall warning facility, posted to LKML at The most notable change reduces the default RCU CPU stall-warning time from 60 seconds to 21 seconds, so that it once again happens sooner than the softlockup timeout. 7. Documentation updates, which were posted to LKML at A couple of late-breaking changes were posted at and 8. Miscellaneous fixes, which were posted to LKML at 9. Finally, a fix for an lockdep-RCU splat was posted to LKML at" * 'core-rcu-for-linus' of git:// (49 commits) context_tracking: New context tracking susbsystem sched: Mark RCU reader in sched_show_task() rcu: Separate accounting of callbacks from callback-free CPUs rcu: Add callback-free CPUs rcu: Add documentation for the new rcuexp debugfs trace file rcu: Update documentation for TREE_RCU debugfs tracing rcu: Reduce default RCU CPU stall warning timeout rcu: Fix TINY_RCU rcu_is_cpu_rrupt_from_idle check rcu: Clarify memory-ordering properties of grace-period primitives rcu: Add new rcutorture module parameters to start/end test messages rcu: Remove list_for_each_continue_rcu() rcu: Fix batch-limit size problem rcu: Add tracing for synchronize_sched_expedited() rcu: Remove old debugfs interfaces and also RCU flavor name rcu: split 'rcuhier' to each flavor rcu: split 'rcugp' to each flavor rcu: split 'rcuboost' to each flavor rcu: split 'rcubarrier' to each flavor rcu: Fix tracing formatting rcu: Remove the interface "rcudata.csv" ...
2012-11-28kernel/ksysfs.c: remove CONFIG_HOTPLUG ifdefsBill Pemberton-4/+1
Remove conditional code based on CONFIG_HOTPLUG being false. It's always on now in preparation of it going away as an option. Signed-off-by: Bill Pemberton <> Signed-off-by: Greg Kroah-Hartman <>
2012-10-23rcu: Add a module parameter to force use of expedited RCU primitivesAntti P Miettinen-0/+18
There have been some embedded applications that would benefit from use of expedited grace-period primitives. In some ways, this is similar to synchronize_net() doing either a normal or an expedited grace period depending on lock state, but with control outside of the kernel. This commit therefore adds rcu_expedited boot and sysfs parameters that cause the kernel to substitute expedited primitives for the normal grace-period primitives. [ paulmck: Add trace/event/rcu.h to kernel/srcu.c to avoid build error. Get rid of infinite loop through contention path.] Signed-off-by: Antti P Miettinen <> Signed-off-by: Paul E. McKenney <>
2011-10-31kernel: ksysfs.c is implicitly using stat.hPaul Gortmaker-0/+1
With the module.h usage cleanup, we'll get this: kernel/ksysfs.c:161: error: ‘S_IRUGO’ undeclared here (not in a function) make[2]: *** [kernel/ksysfs.o] Error 1 Signed-off-by: Paul Gortmaker <>
2011-10-31kernel: Map most files to use export.h instead of module.hPaul Gortmaker-1/+1
The changed files were only including linux/module.h for the EXPORT_SYMBOL infrastructure, and nothing else. Revector them onto the isolated export header for faster compile times. Nothing to see here but a whole lot of instances of: -#include <linux/module.h> +#include <linux/export.h> This commit is only changing the kernel dir; next targets will probably be mm, fs, the arch dirs, etc. Signed-off-by: Paul Gortmaker <>
2011-04-19kernel/ksysfs.c: expose file_caps_enabled in sysfsLudwig Nussel-0/+10
A kernel booted with no_file_caps allows to install fscaps on a binary but doesn't actually honor the fscaps when running the binary. Userspace currently has no sane way to determine whether installing fscaps actually has any effect. Since parsing /proc/cmdline is fragile this patch exposes the current setting (1 or 0) via /sys/kernel/fscaps Signed-off-by: Ludwig Nussel <> Signed-off-by: Greg Kroah-Hartman <>
2010-05-21sysfs: add struct file* to bin_attr callbacksChris Wright-1/+2
This allows bin_attr->read,write,mmap callbacks to check file specific data (such as inode owner) as part of any privilege validation. Signed-off-by: Chris Wright <> Signed-off-by: Greg Kroah-Hartman <>
2010-03-08Merge branch 'for-next' into for-linusJiri Kosina-1/+1
Conflicts: Documentation/filesystems/proc.txt arch/arm/mach-u300/include/mach/debug-macro.S drivers/net/qlge/qlge_ethtool.c drivers/net/qlge/qlge_main.c drivers/net/typhoon.c
2010-02-05fix comment typo boo -> boot in ksysfs.cThadeu Lima de Souza Cascardo-1/+1
Signed-off-by: Thadeu Lima de Souza Cascardo <> Signed-off-by: Jiri Kosina <>
2010-01-21sched: Remove USER_SCHEDDhaval Giani-8/+0
Remove the USER_SCHED feature. It has been scheduled to be removed in 2.6.34 as per Signed-off-by: Dhaval Giani <> Signed-off-by: Peter Zijlstra <> LKML-Reference: <1263990378.24844.3.camel@localhost> Signed-off-by: Ingo Molnar <>
2009-12-16kexec: premit reduction of the reserved memory sizeAmerigo Wang-0/+21
Implement shrinking the reserved memory for crash kernel, if it is more than enough. For example, if you have already reserved 128M, now you just want 100M, you can do: # echo $((100*1024*1024)) > /sys/kernel/kexec_crash_size Note, you can only do this before loading the crash kernel. Signed-off-by: WANG Cong <> Cc: Neil Horman <> Acked-by: Eric W. Biederman <> Cc: Andi Kleen <> Signed-off-by: Andrew Morton <> Signed-off-by: Linus Torvalds <>
2009-01-06kernel/ksysfs.c:fix dependence on CONFIG_NETMing Lei-2/+2
Access to uevent_seqnum and uevent_helper does not need to depend on CONFIG_NET, so remove it. Signed-off-by: Ming Lei <> Cc: Kay Sievers <> Signed-off-by: Greg Kroah-Hartman <>
2008-10-16profiling: dynamically enable readprofile at runtimeDave Hansen-0/+35
Way too often, I have a machine that exhibits some kind of crappy behavior. The CPU looks wedged in the kernel or it is spending way too much system time and I wonder what is responsible. I try to run readprofile. But, of course, Ubuntu doesn't enable it by default. Dang! The reason we boot-time enable it is that it takes a big bufffer that we generally can only bootmem alloc. But, does it hurt to at least try and runtime-alloc it? To use: echo 2 > /sys/kernel/profile Then run readprofile like normal. This should fix the compile issue with allmodconfig. I've compile-tested on a bunch more configs now including a few more architectures. Signed-off-by: Dave Hansen <> Acked-by: Ingo Molnar <> Signed-off-by: Andrew Morton <> Signed-off-by: Linus Torvalds <>
2008-01-24Kobject: convert remaining kobject_unregister() to kobject_put()Greg Kroah-Hartman-1/+1
There is no need for kobject_unregister() anymore, thanks to Kay's kobject cleanup changes, so replace all instances of it with kobject_put(). Cc: Kay Sievers <> Signed-off-by: Greg Kroah-Hartman <>
2008-01-24kobject: convert kernel_kset to be a kobjectGreg Kroah-Hartman-9/+9
kernel_kset does not need to be a kset, but a much simpler kobject now that we have kobj_attributes. We also rename kernel_kset to kernel_kobj to catch all users of this symbol with a build error instead of an easy-to-ignore build warning. Cc: Kay Sievers <> Signed-off-by: Greg Kroah-Hartman <>
2008-01-24fix struct user_info export's sysfs interactionKay Sievers-5/+2
Clean up the use of ksets and kobjects. Kobjects are instances of objects (like struct user_info), ksets are collections of objects of a similar type (like the uids directory containing the user_info directories). So, use kobjects for the user_info directories, and a kset for the "uids" directory. On object cleanup, the final kobject_put() was missing. Cc: Dhaval Giani <> Cc: Srivatsa Vaddagiri <> Signed-off-by: Kay Sievers <> Signed-off-by: Greg Kroah-Hartman <>
2008-01-24Driver Core: switch all dynamic ksets to kobj_sysfs_opsKay Sievers-14/+21
Switch all dynamically created ksets, that export simple attributes, to kobj_attribute from subsys_attribute. Struct subsys_attribute will be removed. Signed-off-by: Kay Sievers <> Cc: Mike Halcrow <> Cc: Phillip Hellewell <> Signed-off-by: Greg Kroah-Hartman <>
2008-01-24kset: convert kernel_subsys to use kset_createGreg Kroah-Hartman-12/+30
Dynamically create the kset instead of declaring it statically. We also rename kernel_subsys to kernel_kset to catch all users of this symbol with a build error instead of an easy-to-ignore build warning. Cc: Kay Sievers <> Signed-off-by: Greg Kroah-Hartman <>
2008-01-24kobject: remove struct kobj_type from struct ksetGreg Kroah-Hartman-1/+1
We don't need a "default" ktype for a kset. We should set this explicitly every time for each kset. This change is needed so that we can make ksets dynamic, and cleans up one of the odd, undocumented assumption that the kset/kobject/ktype model has. This patch is based on a lot of help from Kay Sievers. Nasty bug in the block code was found by Dave Young <> Cc: Kay Sievers <> Cc: Dave Young <> Signed-off-by: Greg Kroah-Hartman <>
2007-10-17add-vmcore: cleanup the coding style according to Andrew's commentsKen'ichi Ohmichi-1/+1
[1/3] Cleanup the coding style according to Andrew's comments: - vmcoreinfo_append_str() should have suitable __attribute__s so that the compiler can check its use. - vmcoreinfo_max_size should have size_t. - Use get_seconds() instead of xtime.tv_sec. - Use instead of UTS_RELEASE. Signed-off-by: Ken'ichi Ohmichi <> Signed-off-by: Andrew Morton <> Signed-off-by: Linus Torvalds <>
2007-10-17Add vmcoreinfoKen'ichi Ohmichi-0/+10
This patch set frees the restriction that makedumpfile users should install a vmlinux file (including the debugging information) into each system. makedumpfile command is the dump filtering feature for kdump. It creates a small dumpfile by filtering unnecessary pages for the analysis. To distinguish unnecessary pages, it needs a vmlinux file including the debugging information. These days, the debugging package becomes a huge file, and it is hard to install it into each system. To solve the problem, kdump developers discussed it at lkml and kexec-ml. As the result, we reached the conclusion that necessary information for dump filtering (called "vmcoreinfo") should be embedded into the first kernel file and it should be accessed through /proc/vmcore during the second kernel. ( Dan Aloni created the patch set for the above implementation. ( And I updated it for multi architectures and memory models. ( Signed-off-by: Dan Aloni <> Signed-off-by: Ken'ichi Ohmichi <> Signed-off-by: Bernhard Walle <> Signed-off-by: Daisuke Nishimura <> Signed-off-by: Andrew Morton <> Signed-off-by: Linus Torvalds <>
2007-10-15sched: group scheduling, sysfs tunablesDhaval Giani-0/+8
Add tunables in sysfs to modify a user's cpu share. A directory is created in sysfs for each new user in the system. /sys/kernel/uids/<uid>/cpu_share Reading this file returns the cpu shares granted for the user. Writing into this file modifies the cpu share for the user. Only an administrator is allowed to modify a user's cpu share. Ex: # cd /sys/kernel/uids/ # cat 512/cpu_share 1024 # echo 2048 > 512/cpu_share # cat 512/cpu_share 2048 # Signed-off-by: Srivatsa Vaddagiri <> Signed-off-by: Dhaval Giani <> Signed-off-by: Ingo Molnar <>
2007-07-20FRV: Fix linkage problemsDavid Howells-2/+2
Make it possible to use __start_notes and __stop_notes without getting a GPREL overflow error from the FRV linker. Small variables that would otherwise be in .data or .bss may, depending on the arch, be placed in special sections (.sdata or .sbss) that permit single instruction references on fixed instruction width machines. __start_notes and __stop_notes aren't really char variables, and certainly don't refer to data in .data or .bss. Making them type "void" fools the compiler into not assuming anything about them. Signed-off-by: David Howells <> Signed-off-by: Linus Torvalds <>
2007-07-19Add /sys/kernel/notesRoland McGrath-0/+28
This patch adds the /sys/kernel/notes magic file. Reading this delivers the contents of the kernel's .notes section. This lets userland easily glean any detailed information about the running kernel's build that was stored there at compile time. Signed-off-by: Roland McGrath <> Cc: Andi Kleen <> Cc: Paul Mackerras <> Cc: Benjamin Herrenschmidt <> Cc: Richard Henderson <> Cc: Ivan Kokshaysky <> Cc: Martin Schwidefsky <> Cc: Heiko Carstens <> Signed-off-by: Andrew Morton <> Signed-off-by: Linus Torvalds <>
2007-05-02remove "struct subsystem" as it is no longer neededGreg Kroah-Hartman-6/+6
We need to work on cleaning up the relationship between kobjects, ksets and ktypes. The removal of 'struct subsystem' is the first step of this, especially as it is not really needed at all. Thanks to Kay for fixing the bugs in this patch. Signed-off-by: Greg Kroah-Hartman <>
2006-06-30Remove obsolete #include <linux/config.h>Jörn Engel-1/+0
Signed-off-by: Jörn Engel <> Signed-off-by: Adrian Bunk <>
2006-06-23[PATCH] Add a sysfs file to determine if a kexec kernel is loadedJeff Moyer-0/+19
Create two files in /sys/kernel, kexec_loaded and kexec_crash_loaded. Each file contains a simple boolean value indicating whether the relevant kernel has been loaded into memory. The motivation for this is geared around support. Signed-off-by: Jeff Moyer <> Cc: "Eric W. Biederman" <> Signed-off-by: Andrew Morton <> Signed-off-by: Linus Torvalds <>
2006-03-24[PATCH] fix build error if CONFIG_SYSFS=nAndrew Morton-2/+2
uevent_seqnum and uevent_helper are only defined if CONFIG_HOTPLUG=y, CONFIG_NET=n. (I stole this back from Greg's tree - it makes allnoconfig work). Cc: Greg KH <> Signed-off-by: Andrew Morton <> Signed-off-by: Linus Torvalds <>
2006-03-20[PATCH] kobject: fix build error if CONFIG_SYSFS=nJun'ichi Nomura-3/+0
Moving uevent_seqnum and uevent_helper to kobject_uevent.c because they are used even if CONFIG_SYSFS=n while kernel/ksysfs.c is built only if CONFIG_SYSFS=y, Signed-off-by: Jun'ichi Nomura <> Signed-off-by: Greg Kroah-Hartman <>
2006-01-10[PATCH] kdump: export per cpu crash notes pointer through sysfsVivek Goyal-13/+0
- Kexec on panic functionality allocates memory for saving cpu registers in case of system crash event. Address of this allocated memory needs to be exported to user space, which is used by kexec-tools. - Previously, a single /sys/kernel/crash_notes entry was being exported as memory allocated was a single continuous array. Now memory allocation being dyanmic and per cpu based, address of per cpu buffer is exported through "/sys/devices/system/cpu/cpuX/crash_notes" Signed-off-by: Vivek Goyal <> Cc: Greg KH <> Signed-off-by: Andrew Morton <> Signed-off-by: Linus Torvalds <>
2006-01-04[PATCH] kobject_uevent CONFIG_NET=n
lib/lib.a(kobject_uevent.o)(.text+0x25f): In function `kobject_uevent': : undefined reference to `__alloc_skb' lib/lib.a(kobject_uevent.o)(.text+0x2a1): In function `kobject_uevent': : undefined reference to `skb_over_panic' lib/lib.a(kobject_uevent.o)(.text+0x31d): In function `kobject_uevent': : undefined reference to `skb_over_panic' lib/lib.a(kobject_uevent.o)(.text+0x356): In function `kobject_uevent': : undefined reference to `netlink_broadcast' lib/lib.a(kobject_uevent.o)(.init.text+0x9): In function `kobject_uevent_init': : undefined reference to `netlink_kernel_create' make: *** [.tmp_vmlinux1] Error 1 Netlink is unconditionally enabled if CONFIG_NET, so that's OK. kobject_uevent.o is compiled even if !CONFIG_HOTPLUG, which is lazy. Let's compound the sin. Signed-off-by: Andrew Morton <> Signed-off-by: Greg Kroah-Hartman <>
2006-01-04[PATCH] driver core: replace "hotplug" by "uevent"Kay Sievers-7/+7
Leave the overloaded "hotplug" word to susbsystems which are handling real devices. The driver core does not "plug" anything, it just exports the state to userspace and generates events. Signed-off-by: Kay Sievers <> Signed-off-by: Greg Kroah-Hartman <>
2006-01-04[PATCH] add uevent_helper control in /sys/kernel/Kay Sievers-3/+22
This deprecates the /proc/sys/kernel/hotplug file, as all this stuff should be in /sys some day, right? :) In /sys/kernel/ we have now uevent_seqnum and uevent_helper. The seqnum is no longer used by udev, as the version for this kernel depends on netlink which events will never get out-of-order. Recent udev versions disable the /sbin/hotplug helper with an init script, cause it leads to OOM on big boxes by running hundreds of shells in parallel. It should be done now by: echo "" > /sys/kernel/uevent_helper (Note that "-n" does not work, cause neighter proc nor sysfs support truncate().) Signed-off-by: Kay Sievers <> Signed-off-by: Greg Kroah-Hartman <>
2005-06-25[PATCH] Kdump: Export crash notes section address through sysfsVivek Goyal-0/+13
o Following patch exports kexec global variable "crash_notes" to user space through sysfs as kernel attribute in /sys/kernel. Signed-off-by: Maneesh Soni <> Signed-off-by: Andrew Morton <> Signed-off-by: Linus Torvalds <>
2005-04-16Linux-2.6.12-rc2v2.6.12-rc2Linus Torvalds-0/+57
Initial git repository build. I'm not bothering with the full history, even though we have it. We can create a separate "historical" git archive of that later if we want to, and in the meantime it's about 3.2GB when imported into git - space that would just make the early git days unnecessarily complicated, when we don't have a lot of good infrastructure for it. Let it rip!