aboutsummaryrefslogtreecommitdiff
path: root/arch/sparc/kernel
AgeCommit message (Collapse)AuthorFilesLines
2009-02-13Merge branch 'linus' into x86/apicIngo Molnar10-79/+449
Conflicts: arch/x86/kernel/acpi/boot.c arch/x86/mm/fault.c
2009-02-11sparc64: Fix crashes in jbusmc_print_dimm()David S. Miller1-0/+1
Return was missing for the case where there is no dimm info match. Signed-off-by: David S. Miller <[email protected]>
2009-02-08sparc64: Kill .fixup section bloat.David S. Miller1-3/+28
This is an implementation of a suggestion made by Chris Torek: -------------------- Something else I noticed in passing: the EX and EX_LD/EX_ST macros scattered throughout the various .S files make a fair bit of .fixup code, all of which does the same thing. At the cost of one symbol in copy_in_user.S, you could just have one common two-instruction retl-and-mov-1 fixup that they all share. -------------------- The following is with a defconfig build: text data bss dec hex filename 3972767 344024 584449 4901240 4ac978 vmlinux.orig 3968887 344024 584449 4897360 4aba50 vmlinux Signed-off-by: David S. Miller <[email protected]>
2009-02-05sparc64: Don't hook up pcr_ops on spitfire chips.David S. Miller1-1/+6
They can't be used for profiling and NMI watchdog currently since they lack the counter overflow interrupt. Signed-off-by: David S. Miller <[email protected]>
2009-02-04sparc64: Call dump_stack() in die_nmi().David S. Miller1-0/+1
Signed-off-by: David S. Miller <[email protected]>
2009-02-02sparc: fixup for sparseirq changesStephen Rothwell1-1/+1
Signed-off-by: Stephen Rothwell <[email protected]> Signed-off-by: David S. Miller <[email protected]>
2009-02-02sparc64: On non-Niagara, need to touch NMI watchdog in NOHZ mode.David S. Miller1-1/+4
When we're idling in NOHZ mode, timer interrupts are not running. Evidence of processing timer interrupts is what the NMI watchdog uses to determine if the CPU is stuck. On Niagara, we'll yield the cpu. This will make the cpu, at worst, hang out in the hypervisor until an interrupt arrives. This will prevent the NMI watchdog timer from firing. However on non-Niagara we just loop executing instructions which will cause the NMI watchdog to keep firing. It won't see timer interrupts happening so it will think the cpu is stuck. Fix this by touching the NMI watchdog in the cpu idle loop on non-Niagara machines. Signed-off-by: David S. Miller <[email protected]>
2009-01-30sparc64: Implement NMI watchdog on capable cpus.David S. Miller4-65/+245
Signed-off-by: David S. Miller <[email protected]>
2009-01-28sparc: Probe PMU type and record in sparc_pmu_type.David S. Miller3-11/+25
Signed-off-by: David S. Miller <[email protected]>
2009-01-28sparc64: Move generic PCR support code to seperate file.David S. Miller3-1/+143
It all lives in the oprofile support code currently and we will need to share this stuff with NMI watchdog and perf_counter support. Signed-off-by: David S. Miller <[email protected]>
2009-01-27Merge branch 'linus' into core/percpuIngo Molnar7-41/+65
Conflicts: arch/x86/kernel/setup_percpu.c
2009-01-22sparc64: Fix build by using kstat_irqs_cpu()David Miller1-1/+1
Changeset d7e51e66899f95dabc89b4d4c6674a6e50fa37fc ("sparseirq: make some func to be used with genirq") broke the build on sparc64: arch/sparc/kernel/irq_64.c: In function ‘show_interrupts’: arch/sparc/kernel/irq_64.c:188: error: ‘struct kernel_stat’ has no member named ‘irqs’ make[1]: *** [arch/sparc/kernel/irq_64.o] Error 1 Fix by using the kstat_irqs_cpu() interface. Signed-off-by: David S. Miller <[email protected]> Signed-off-by: Ingo Molnar <[email protected]>
2009-01-22sparc64: Fix build by including linux/irq.h into time_64.cDavid Miller1-1/+1
Changeset d7e51e66899f95dabc89b4d4c6674a6e50fa37fc ("sparseirq: make some func to be used with genirq") broke the build on sparc64: arch/sparc/kernel/time_64.c: In function ‘timer_interrupt’: arch/sparc/kernel/time_64.c:732: error: implicit declaration of function ‘kstat_incr_irqs_this_cpu’ make[1]: *** [arch/sparc/kernel/time_64.o] Error 1 Signed-off-by: David S. Miller <[email protected]> Signed-off-by: Ingo Molnar <[email protected]>
2009-01-21Merge branch 'x86/mm' into core/percpuIngo Molnar5-18/+7
Conflicts: arch/x86/mm/fault.c
2009-01-19sparc64: Fix DAX handling via userspace access from kernel.David S. Miller1-1/+16
If we do a userspace access from kernel mode, and get a data access exception, we need to check the exception table just like a normal fault does. The spitfire DAX handler was doing this, but such logic was missing from the sun4v DAX code. Reported-by: Dennis Gilmore <[email protected]> Signed-off-by: David S. Miller <[email protected]>
2009-01-19sparc64: Annotate sparc64 specific syscalls with SYSCALL_DEFINEx()David S. Miller4-37/+32
Signed-off-by: David S. Miller <[email protected]>
2009-01-19sparc64: Initialize FHC/CLOCK LED platform_device 'id' field correctly.David S. Miller1-0/+2
There is only one clock board, so use -1 as the 'id' so we get just the base name as the LED device name string. There are multiple FHC boards potentially in a system so use the board number as the 'id' value for that case. Reported-by: Meelis Roos <[email protected]> Tested-by: Meelis Roos <[email protected]> Signed-off-by: David S. Miller <[email protected]>
2009-01-17sparc64: fix readout of cpu/fpu typeSam Ravnborg1-3/+15
Meelis reported that on his box /proc/cpuinfo started to reported "Unknow CPU" and the same did the boot messages. It was a stupid bug I introduced when merging cpu.c for 32 and 64 bit. The code did an array reference where it had to search for the right index. Reported-by: Meelis Roos <[email protected]> Tested-by: Meelis Roos <[email protected]> Signed-off-by: Sam Ravnborg <[email protected]> Signed-off-by: David S. Miller <[email protected]>
2009-01-15Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6Linus Torvalds1-11/+0
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6: sparc64: Fix UP build failure.
2009-01-15Merge branches 'cpus4096', 'x86/cleanups' and 'x86/urgent' into x86/percpuIngo Molnar2-3/+4
2009-01-15irq: update all arches for new irq_desc, fixMike Travis1-1/+1
Impact: fix build errors Since the SPARSE IRQS changes redefined how the kstat irqs are organized, arch's must use the new accessor function: kstat_incr_irqs_this_cpu(irq, DESC); If CONFIG_SPARSE_IRQS is set, then DESC is a pointer to the irq_desc which has a pointer to the kstat_irqs. If not, then the .irqs field of struct kernel_stat is used instead. Signed-off-by: Mike Travis <[email protected]> Signed-off-by: Ingo Molnar <[email protected]>
2009-01-14[CVE-2009-0029] Remove __attribute__((weak)) from sys_pipe/sys_pipe2Heiko Carstens4-6/+6
Remove __attribute__((weak)) from common code sys_pipe implemantation. IA64, ALPHA, SUPERH (32bit) and SPARC (32bit) have own implemantations with the same name. Just rename them. For sys_pipe2 there is no architecture specific implementation. Cc: Richard Henderson <[email protected]> Cc: David S. Miller <[email protected]> Cc: Paul Mundt <[email protected]> Cc: Tony Luck <[email protected]> Signed-off-by: Heiko Carstens <[email protected]>
2009-01-14[CVE-2009-0029] Rename old_readdir to sys_old_readdirHeiko Carstens1-1/+1
This way it matches the generic system call name convention. Signed-off-by: Heiko Carstens <[email protected]>
2009-01-13sparc64: Fix UP build failure.David S. Miller1-11/+0
sparc_ksyms_64.c includes asm/spinlock.h directly, which is a no-no. Even better, none of these exports are even necessary. All of these functions are inlines. Reported by Meelis Roos and Alexander Beregalov. Signed-off-by: David S. Miller <[email protected]>
2009-01-12Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6Linus Torvalds23-484/+109
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6: sparc: Fix asm/signal.h for 32-bit. sparc: Eliminate PROMLIB_INTERNAL as it does nothing sparc: Kill exports of prom internal functions sparc64: move EXPORT_SYMBOL to the symbols definition sparc: move EXPORT_SYMBOL to the symbols definition sparc: Create a new file lib/ksyms.c and add export of all symbols defined in assembler in lib/ to this file. sparc: Most unaligned_64.c tweaks for branch tracer warnings. sparc: Fix sun4d_irq.c build. sparc: Update 32-bit defconfig. sparc64: fix warnings in psycho_common after ull conversion
2009-01-12irq: update all arches for new irq_descMike Travis1-2/+3
Impact: cleanup, update to new cpumask API Irq_desc.affinity and irq_desc.pending_mask are now cpumask_var_t's so access to them should be using the new cpumask API. Signed-off-by: Mike Travis <[email protected]>
2009-01-08sparc: Eliminate PROMLIB_INTERNAL as it does nothingJulian Calaby2-4/+0
Signed-off-by: Julian Calaby <[email protected]> Signed-off-by: David S. Miller <[email protected]>
2009-01-08sparc64: move EXPORT_SYMBOL to the symbols definitionSam Ravnborg9-124/+27
Move all applicable EXPORT_SYMBOL()s to the file where the respective symbol is defined. Removed all the includes that are no longer needed in sparc_ksyms_64.c Comment all remaining EXPORT_SYMBOL()s in sparc_ksyms_64.c Signed-off-by: Sam Ravnborg <[email protected]> Additions by Julian Calaby: * Moved EXPORT_SYMBOL()s for prom functions to their rightful places. * Made some minor cleanups to the includes and comments of sparc_ksyms_64.c * Updated and tidied commit message. * Rebased patch over sparc-2.6.git HEAD. * Ensured that all modified files have the correct includes. Signed-off-by: Julian Calaby <[email protected]> Signed-off-by: David S. Miller <[email protected]>
2009-01-08sparc: move EXPORT_SYMBOL to the symbols definitionSam Ravnborg12-134/+46
Move all applicable EXPORT_SYMBOL()s to the file where the respective symbol is defined. Removed all the includes that are no longer needed in sparc_ksyms_32.c Comment all remaining EXPORT_SYMBOL()s in sparc_ksyms_32.c Two symbols are shared with sparc64 thus the exports were removed from the sparc_ksyms_64.c too, along with the include their ommission made redundant. Signed-off-by: Sam Ravnborg <[email protected]> Additions by Julian Calaby: * Moved EXPORT_SYMBOL()s for prom functions to their rightful places. * Made some minor cleanups to the includes and comments of sparc_ksyms_32.c * Made another subtraction from sparc_ksyms_64.c * Updated and tidied commit message. * Rebased patch over sparc-2.6.git HEAD. * Ensured that all modified files have the correct includes. Signed-off-by: Julian Calaby <[email protected]> Signed-off-by: David S. Miller <[email protected]>
2009-01-08sparc: Create a new file lib/ksyms.c and add export of all symbols defined ↵Sam Ravnborg2-186/+0
in assembler in lib/ to this file. Remove the duplicate entries from kernel/sparc_ksyms_*.c The rationale behind this is that the EXPORT_SYMBOL() should be close to their definition and we cannot add designate a symbol to be exported in assembler so at least put it in a file in the same directory. Signed-off-by: Sam Ravnborg <[email protected]> Additions by Julian Calaby: * Rebased over sparc-2.6.git HEAD Signed-off-by: Julian Calaby <[email protected]> Signed-off-by: David S. Miller <[email protected]>
2009-01-08sparc: Most unaligned_64.c tweaks for branch tracer warnings.David S. Miller1-4/+4
arch/sparc/kernel/unaligned_64.c: In function 'handle_lddfmna': arch/sparc/kernel/unaligned_64.c:592: warning: 'second' may be used uninitialized in this function Signed-off-by: David S. Miller <[email protected]>
2009-01-08sparc: Fix sun4d_irq.c build.David S. Miller1-2/+2
Reported by Robert Reif. Fallout from 'swap' changes. Signed-off-by: David S. Miller <[email protected]>
2009-01-08sparc64: fix warnings in psycho_common after ull conversionSam Ravnborg1-30/+30
After conversion to use unsigned long long for u64 I saw following warnings: CC arch/sparc/kernel/psycho_common.o arch/sparc/kernel/psycho_common.c: In function `psycho_check_stc_error': arch/sparc/kernel/psycho_common.c:104: warning: long long unsigned int format, long unsigned int arg (arg 4) arch/sparc/kernel/psycho_common.c:104: warning: long long unsigned int format, long unsigned int arg (arg 5) arch/sparc/kernel/psycho_common.c:114: warning: long long unsigned int format, long unsigned int arg (arg 4) arch/sparc/kernel/psycho_common.c:114: warning: long long unsigned int format, long unsigned int arg (arg 5) arch/sparc/kernel/psycho_common.c:114: warning: long long unsigned int format, long unsigned int arg (arg 6) arch/sparc/kernel/psycho_common.c:114: warning: long long unsigned int format, long unsigned int arg (arg 7) arch/sparc/kernel/psycho_common.c: In function `psycho_dump_iommu_tags_and_data': arch/sparc/kernel/psycho_common.c:187: warning: long long unsigned int format, long unsigned int arg (arg 8) arch/sparc/kernel/psycho_common.c:193: warning: long long unsigned int format, long unsigned int arg (arg 6) arch/sparc/kernel/psycho_common.c: In function `psycho_pcierr_intr': arch/sparc/kernel/psycho_common.c:333: warning: long long unsigned int format, long unsigned int arg (arg 3) arch/sparc/kernel/psycho_common.c:333: warning: long long unsigned int format, long unsigned int arg (arg 4) This is due to different integer promotion in my 32 bit hosted gcc. The fix is to force a few constants to ULL. The following stands out from the rest: +#define PSYCHO_IOMMU_TAG_VPAGE 0x7ffffULL +#define PSYCHO_IOMMU_DATA_PPAGE 0xfffffffULL They were needed otherwise the expression: (data_val & PSYCHO_IOMMU_DATA_PPAGE) << IOMMU_PAGE_SHIFT) were promoted to a unsigned long and not a unsigned long long as expected. I tried the alternative solution and made IOMMU_PAGE_SHIFT an ULL but that did not help. The only way gcc would make this expression an unsigned long long was to define PSYCHO_IOMMU_DATA_PPAGE as ULL. The alternative to add a cast was not considered a valid solution. We had this issue in two places and this were the only places the above two constants are used. A small coding style diff sneaked in too. Signed-off-by: Sam Ravnborg <[email protected]> Signed-off-by: David S. Miller <[email protected]>
2009-01-08generic swap(): sparc: rename swap() to swap_ulong()Wu Fengguang1-2/+3
In preparation for the introduction of a generic swap() macro. Signed-off-by: Wu Fengguang <[email protected]> Acked-by: David S. Miller <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
2009-01-07Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6Linus Torvalds19-76/+83
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6: sparc64: Work around branch tracer warning. sparc64: Fix unsigned long long warnings in drivers. sparc64: Use unsigned long long for u64. sparc: refactor code in fault_32.c sparc64: refactor code in init_64.c sparc64: refactor code in viohs.c sparc: make proces_ver_nack a bit more readable
2009-01-07sparc64: Work around branch tracer warning.David S. Miller1-2/+6
As reported by Sam Ravnborg, Gcc-3.4.5 does not handle: if (get_user() || get_user()) with the new branch tracer enabled. Just seperate it out into seperate statements for now so people can get work done. Signed-off-by: David S. Miller <[email protected]>
2009-01-06sparc64: Use unsigned long long for u64.Sam Ravnborg16-61/+61
Andrew Morton wrote: People keep on doing printk("%llu", some_u64); testing it only on x86_64 and this generates a warning storm on powerpc, sparc64, etc. Because they use `long', not `long long'. Quite a few 64-bit architectures are using `long' for their s64/u64 types. We should convert them all to `long long'. Update types.h so we use unsigned long long for u64 and fix all warnings in sparc64 code. Tested with an allnoconfig, defconfig and allmodconfig builds. This patch introduces additional warnings in several drivers. These will be dealt with in separate patches. Signed-off-by: Sam Ravnborg <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: David S. Miller <[email protected]>
2009-01-06sparc64: refactor code in viohs.cSam Ravnborg1-2/+4
The sparc64 allmodconfig build broke due to enabling of the branch_tracer that does some very clever things with all if conditions. This caused my gcc 3.4.5 to be so confused that it emitted a warning: arch/sparc/kernel/viohs.c: In function `vio_control_pkt_engine': arch/sparc/kernel/viohs.c:335: warning: 'nver' might be used uninitialized in this function And with -Werror this broke the build. Refactor code so it: 1) becomes more readable 2) no longer emit a warning with the branch_tracer enabled Signed-off-by: Sam Ravnborg <[email protected]> Signed-off-by: David S. Miller <[email protected]>
2009-01-06sparc: make proces_ver_nack a bit more readableSteven Rostedt1-11/+12
Impact: clean up The code in process_ver_nack is a little obfuscated. This change makes it a bit more readable by humans. It removes the complex if statement and replaces it with a cleaner flow of control. Signed-off-by: Steven Rostedt <[email protected]> Reviewed-by: Sam Ravnborg <[email protected]> Signed-off-by: David S. Miller <[email protected]>
2009-01-06trivial: fix then -> than typos in comments and documentationFrederik Schwarzer1-1/+1
- (better, more, bigger ...) then -> (...) than Signed-off-by: Frederik Schwarzer <[email protected]> Signed-off-by: Jiri Kosina <[email protected]>
2009-01-05Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6Linus Torvalds10-47/+38
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6: (30 commits) sparc: Fix minor SPARC32 compile error sparc: Remove reg*.h from Kbuild sparc: Clean arch-specific code in prom_common.c sparc: Kill asm/reg*.h sparc: Use 64BIT config entry MAINTAINERS: update sparc maintainer sparc: unify ipcbuf.h sparc: Update 64-bit defconfig. sparc: remove NO_PROC_ID - it is no longer used sparc: drop get_tbr() in traps.h sparc: fix warning in userspace header traps.h sparc: fix warnings in userspace header byteorder.h sparc: fix warning in userspace header jsflash.h sparc: unify openprom.h sparc64: delete unused linux_prom64_ranges from openprom_64.h sparc: prepare openprom for unification sparc: remove linux_prom_pci_assigned_addresses from openprom_32.h sparc: remove ebus definitions from openprom*.h sparc: unify siginfo.h sparc: unify ptrace.h ...
2009-01-05sparc: Fix minor SPARC32 compile errorJulian Calaby1-0/+2
When CONFIG_PROC_FS is unset, include/linux/interrupt.h defines init_irq_proc() as an empty function. arch/sparc/kernel/irq_32.c defines this function unconditionally. Fix the latter so that it only defines this function when CONFIG_PROC_FS is set. This fixes the following error: arch/sparc/kernel/irq_32.c:672: error: redefinition of 'init_irq_proc' include/linux/interrupt.h:461: error: previous definition of 'init_irq_proc' was here This was found using randconfig builds. Signed-off-by: Julian Calaby <[email protected]> Signed-off-by: David S. Miller <[email protected]>
2009-01-05sparc: Clean arch-specific code in prom_common.cJulian Calaby1-11/+3
prom_nextprop() and prom_firstprop() have slightly different calling conventions in 32 and 64 bit SPARC. prom_common.c uses a ifdef guard to ensure that these functions are called correctly. Adjust code to eliminate this ifdef by using a calling convention that is compatible with both 32 and 64 bit SPARC. Signed-off-by: Julian Calaby <[email protected]> Reviewed-by: Sam Ravnborg <[email protected]> Signed-off-by: David S. Miller <[email protected]>
2009-01-03Merge branch 'cpus4096-for-linus-3' of ↵Linus Torvalds2-2/+2
git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip * 'cpus4096-for-linus-3' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (77 commits) x86: setup_per_cpu_areas() cleanup cpumask: fix compile error when CONFIG_NR_CPUS is not defined cpumask: use alloc_cpumask_var_node where appropriate cpumask: convert shared_cpu_map in acpi_processor* structs to cpumask_var_t x86: use cpumask_var_t in acpi/boot.c x86: cleanup some remaining usages of NR_CPUS where s/b nr_cpu_ids sched: put back some stack hog changes that were undone in kernel/sched.c x86: enable cpus display of kernel_max and offlined cpus ia64: cpumask fix for is_affinity_mask_valid() cpumask: convert RCU implementations, fix xtensa: define __fls mn10300: define __fls m32r: define __fls h8300: define __fls frv: define __fls cris: define __fls cpumask: CONFIG_DISABLE_OBSOLETE_CPUMASK_FUNCTIONS cpumask: zero extra bits in alloc_cpumask_var_node cpumask: replace for_each_cpu_mask_nr with for_each_cpu in kernel/time/ cpumask: convert mm/ ...
2009-01-02sparc: add '32' suffix to reg_window, sigcontext, __siginfo_tSam Ravnborg7-32/+32
Renaming a few types to contain a 32 suffix makes the type names compatible with sparc64 and thus makes sharing between the two a lot easier. Note: None of these definitions are expected part of the stable ABI towards userspace. Signed-off-by: Sam Ravnborg <[email protected]> Signed-off-by: David S. Miller <[email protected]>
2009-01-02sparc: Kill bogus comment about IRQF_SHARED in pci_psycho.cDavid S. Miller1-4/+1
Noticed by Geert Uytterhoeven. Signed-off-by: David S. Miller <[email protected]>
2009-01-02Merge branch 'cpus4096-for-linus-2' of ↵Linus Torvalds7-19/+12
git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip * 'cpus4096-for-linus-2' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (66 commits) x86: export vector_used_by_percpu_irq x86: use logical apicid in x2apic_cluster's x2apic_cpu_mask_to_apicid_and() sched: nominate preferred wakeup cpu, fix x86: fix lguest used_vectors breakage, -v2 x86: fix warning in arch/x86/kernel/io_apic.c sched: fix warning in kernel/sched.c sched: move test_sd_parent() to an SMP section of sched.h sched: add SD_BALANCE_NEWIDLE at MC and CPU level for sched_mc>0 sched: activate active load balancing in new idle cpus sched: bias task wakeups to preferred semi-idle packages sched: nominate preferred wakeup cpu sched: favour lower logical cpu number for sched_mc balance sched: framework for sched_mc/smt_power_savings=N sched: convert BALANCE_FOR_xx_POWER to inline functions x86: use possible_cpus=NUM to extend the possible cpus allowed x86: fix cpu_mask_to_apicid_and to include cpu_online_mask x86: update io_apic.c to the new cpumask code x86: Introduce topology_core_cpumask()/topology_thread_cpumask() x86: xen: use smp_call_function_many() x86: use work_on_cpu in x86/kernel/cpu/mcheck/mce_amd_64.c ... Fixed up trivial conflict in kernel/time/tick-sched.c manually
2008-12-31take init_fs to saner placeAl Viro1-1/+0
Signed-off-by: Al Viro <[email protected]>
2008-12-31Merge branch 'master' of ↵Rusty Russell126-571/+43631
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6 Conflicts: arch/x86/kernel/io_apic.c
2008-12-28Merge branch 'master' of ↵David S. Miller1-4/+1
master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6 Conflicts: arch/sparc64/kernel/idprom.c