Commit 0afe832e authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'x86-cleanups-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull x86 cleanups from Ingo Molnar:
 "Misc cleanups"

* 'x86-cleanups-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  x86/apm: Fix spelling mistake: "caculate" -> "calculate"
  x86/mtrr: Rename main.c to mtrr.c and remove duplicate prefixes
  x86: Remove pr_fmt duplicate logging prefixes
  x86/early-quirks: Rename duplicate define of dev_err
  x86/bpf: Clean up non-standard comments, to make the code more readable
parents 42964c6f 844ea8f6
...@@ -889,7 +889,7 @@ static void force_ibs_eilvt_setup(void) ...@@ -889,7 +889,7 @@ static void force_ibs_eilvt_setup(void)
if (!ibs_eilvt_valid()) if (!ibs_eilvt_valid())
goto out; goto out;
pr_info("IBS: LVT offset %d assigned\n", offset); pr_info("LVT offset %d assigned\n", offset);
return; return;
out: out:
......
...@@ -2433,7 +2433,7 @@ MODULE_PARM_DESC(idle_threshold, ...@@ -2433,7 +2433,7 @@ MODULE_PARM_DESC(idle_threshold,
"System idle percentage above which to make APM BIOS idle calls"); "System idle percentage above which to make APM BIOS idle calls");
module_param(idle_period, int, 0444); module_param(idle_period, int, 0444);
MODULE_PARM_DESC(idle_period, MODULE_PARM_DESC(idle_period,
"Period (in sec/100) over which to caculate the idle percentage"); "Period (in sec/100) over which to calculate the idle percentage");
module_param(smp, bool, 0444); module_param(smp, bool, 0444);
MODULE_PARM_DESC(smp, MODULE_PARM_DESC(smp,
"Set this to enable APM use on an SMP platform. Use with caution on older systems"); "Set this to enable APM use on an SMP platform. Use with caution on older systems");
......
obj-y := main.o if.o generic.o cleanup.o obj-y := mtrr.o if.o generic.o cleanup.o
obj-$(CONFIG_X86_32) += amd.o cyrix.o centaur.o obj-$(CONFIG_X86_32) += amd.o cyrix.o centaur.o
...@@ -101,7 +101,7 @@ static int have_wrcomb(void) ...@@ -101,7 +101,7 @@ static int have_wrcomb(void)
if (dev->vendor == PCI_VENDOR_ID_SERVERWORKS && if (dev->vendor == PCI_VENDOR_ID_SERVERWORKS &&
dev->device == PCI_DEVICE_ID_SERVERWORKS_LE && dev->device == PCI_DEVICE_ID_SERVERWORKS_LE &&
dev->revision <= 5) { dev->revision <= 5) {
pr_info("mtrr: Serverworks LE rev < 6 detected. Write-combining disabled.\n"); pr_info("Serverworks LE rev < 6 detected. Write-combining disabled.\n");
pci_dev_put(dev); pci_dev_put(dev);
return 0; return 0;
} }
...@@ -111,7 +111,7 @@ static int have_wrcomb(void) ...@@ -111,7 +111,7 @@ static int have_wrcomb(void)
*/ */
if (dev->vendor == PCI_VENDOR_ID_INTEL && if (dev->vendor == PCI_VENDOR_ID_INTEL &&
dev->device == PCI_DEVICE_ID_INTEL_82451NX) { dev->device == PCI_DEVICE_ID_INTEL_82451NX) {
pr_info("mtrr: Intel 450NX MMC detected. Write-combining disabled.\n"); pr_info("Intel 450NX MMC detected. Write-combining disabled.\n");
pci_dev_put(dev); pci_dev_put(dev);
return 0; return 0;
} }
...@@ -313,24 +313,24 @@ int mtrr_add_page(unsigned long base, unsigned long size, ...@@ -313,24 +313,24 @@ int mtrr_add_page(unsigned long base, unsigned long size,
return error; return error;
if (type >= MTRR_NUM_TYPES) { if (type >= MTRR_NUM_TYPES) {
pr_warn("mtrr: type: %u invalid\n", type); pr_warn("type: %u invalid\n", type);
return -EINVAL; return -EINVAL;
} }
/* If the type is WC, check that this processor supports it */ /* If the type is WC, check that this processor supports it */
if ((type == MTRR_TYPE_WRCOMB) && !have_wrcomb()) { if ((type == MTRR_TYPE_WRCOMB) && !have_wrcomb()) {
pr_warn("mtrr: your processor doesn't support write-combining\n"); pr_warn("your processor doesn't support write-combining\n");
return -ENOSYS; return -ENOSYS;
} }
if (!size) { if (!size) {
pr_warn("mtrr: zero sized request\n"); pr_warn("zero sized request\n");
return -EINVAL; return -EINVAL;
} }
if ((base | (base + size - 1)) >> if ((base | (base + size - 1)) >>
(boot_cpu_data.x86_phys_bits - PAGE_SHIFT)) { (boot_cpu_data.x86_phys_bits - PAGE_SHIFT)) {
pr_warn("mtrr: base or size exceeds the MTRR width\n"); pr_warn("base or size exceeds the MTRR width\n");
return -EINVAL; return -EINVAL;
} }
...@@ -361,8 +361,7 @@ int mtrr_add_page(unsigned long base, unsigned long size, ...@@ -361,8 +361,7 @@ int mtrr_add_page(unsigned long base, unsigned long size,
} else if (types_compatible(type, ltype)) } else if (types_compatible(type, ltype))
continue; continue;
} }
pr_warn("mtrr: 0x%lx000,0x%lx000 overlaps existing" pr_warn("0x%lx000,0x%lx000 overlaps existing 0x%lx000,0x%lx000\n", base, size, lbase,
" 0x%lx000,0x%lx000\n", base, size, lbase,
lsize); lsize);
goto out; goto out;
} }
...@@ -370,7 +369,7 @@ int mtrr_add_page(unsigned long base, unsigned long size, ...@@ -370,7 +369,7 @@ int mtrr_add_page(unsigned long base, unsigned long size,
if (ltype != type) { if (ltype != type) {
if (types_compatible(type, ltype)) if (types_compatible(type, ltype))
continue; continue;
pr_warn("mtrr: type mismatch for %lx000,%lx000 old: %s new: %s\n", pr_warn("type mismatch for %lx000,%lx000 old: %s new: %s\n",
base, size, mtrr_attrib_to_str(ltype), base, size, mtrr_attrib_to_str(ltype),
mtrr_attrib_to_str(type)); mtrr_attrib_to_str(type));
goto out; goto out;
...@@ -396,7 +395,7 @@ int mtrr_add_page(unsigned long base, unsigned long size, ...@@ -396,7 +395,7 @@ int mtrr_add_page(unsigned long base, unsigned long size,
} }
} }
} else { } else {
pr_info("mtrr: no more MTRRs available\n"); pr_info("no more MTRRs available\n");
} }
error = i; error = i;
out: out:
...@@ -408,8 +407,8 @@ int mtrr_add_page(unsigned long base, unsigned long size, ...@@ -408,8 +407,8 @@ int mtrr_add_page(unsigned long base, unsigned long size,
static int mtrr_check(unsigned long base, unsigned long size) static int mtrr_check(unsigned long base, unsigned long size)
{ {
if ((base & (PAGE_SIZE - 1)) || (size & (PAGE_SIZE - 1))) { if ((base & (PAGE_SIZE - 1)) || (size & (PAGE_SIZE - 1))) {
pr_warn("mtrr: size and base must be multiples of 4 kiB\n"); pr_warn("size and base must be multiples of 4 kiB\n");
pr_debug("mtrr: size: 0x%lx base: 0x%lx\n", size, base); pr_debug("size: 0x%lx base: 0x%lx\n", size, base);
dump_stack(); dump_stack();
return -1; return -1;
} }
...@@ -500,22 +499,22 @@ int mtrr_del_page(int reg, unsigned long base, unsigned long size) ...@@ -500,22 +499,22 @@ int mtrr_del_page(int reg, unsigned long base, unsigned long size)
} }
} }
if (reg < 0) { if (reg < 0) {
pr_debug("mtrr: no MTRR for %lx000,%lx000 found\n", pr_debug("no MTRR for %lx000,%lx000 found\n",
base, size); base, size);
goto out; goto out;
} }
} }
if (reg >= max) { if (reg >= max) {
pr_warn("mtrr: register: %d too big\n", reg); pr_warn("register: %d too big\n", reg);
goto out; goto out;
} }
mtrr_if->get(reg, &lbase, &lsize, &ltype); mtrr_if->get(reg, &lbase, &lsize, &ltype);
if (lsize < 1) { if (lsize < 1) {
pr_warn("mtrr: MTRR %d not used\n", reg); pr_warn("MTRR %d not used\n", reg);
goto out; goto out;
} }
if (mtrr_usage_table[reg] < 1) { if (mtrr_usage_table[reg] < 1) {
pr_warn("mtrr: reg: %d has count=0\n", reg); pr_warn("reg: %d has count=0\n", reg);
goto out; goto out;
} }
if (--mtrr_usage_table[reg] < 1) if (--mtrr_usage_table[reg] < 1)
...@@ -776,7 +775,7 @@ void __init mtrr_bp_init(void) ...@@ -776,7 +775,7 @@ void __init mtrr_bp_init(void)
} }
if (!mtrr_enabled()) { if (!mtrr_enabled()) {
pr_info("MTRR: Disabled\n"); pr_info("Disabled\n");
/* /*
* PAT initialization relies on MTRR's rendezvous handler. * PAT initialization relies on MTRR's rendezvous handler.
......
...@@ -155,7 +155,8 @@ static void __init __e820__range_add(struct e820_table *table, u64 start, u64 si ...@@ -155,7 +155,8 @@ static void __init __e820__range_add(struct e820_table *table, u64 start, u64 si
int x = table->nr_entries; int x = table->nr_entries;
if (x >= ARRAY_SIZE(table->entries)) { if (x >= ARRAY_SIZE(table->entries)) {
pr_err("e820: too many entries; ignoring [mem %#010llx-%#010llx]\n", start, start + size - 1); pr_err("too many entries; ignoring [mem %#010llx-%#010llx]\n",
start, start + size - 1);
return; return;
} }
...@@ -190,7 +191,8 @@ void __init e820__print_table(char *who) ...@@ -190,7 +191,8 @@ void __init e820__print_table(char *who)
int i; int i;
for (i = 0; i < e820_table->nr_entries; i++) { for (i = 0; i < e820_table->nr_entries; i++) {
pr_info("%s: [mem %#018Lx-%#018Lx] ", who, pr_info("%s: [mem %#018Lx-%#018Lx] ",
who,
e820_table->entries[i].addr, e820_table->entries[i].addr,
e820_table->entries[i].addr + e820_table->entries[i].size - 1); e820_table->entries[i].addr + e820_table->entries[i].size - 1);
...@@ -574,7 +576,7 @@ void __init e820__update_table_print(void) ...@@ -574,7 +576,7 @@ void __init e820__update_table_print(void)
if (e820__update_table(e820_table)) if (e820__update_table(e820_table))
return; return;
pr_info("e820: modified physical RAM map:\n"); pr_info("modified physical RAM map:\n");
e820__print_table("modified"); e820__print_table("modified");
} }
...@@ -636,9 +638,8 @@ __init void e820__setup_pci_gap(void) ...@@ -636,9 +638,8 @@ __init void e820__setup_pci_gap(void)
if (!found) { if (!found) {
#ifdef CONFIG_X86_64 #ifdef CONFIG_X86_64
gapstart = (max_pfn << PAGE_SHIFT) + 1024*1024; gapstart = (max_pfn << PAGE_SHIFT) + 1024*1024;
pr_err( pr_err("Cannot find an available gap in the 32-bit address range\n");
"e820: Cannot find an available gap in the 32-bit address range\n" pr_err("PCI devices with unassigned 32-bit BARs may not work!\n");
"e820: PCI devices with unassigned 32-bit BARs may not work!\n");
#else #else
gapstart = 0x10000000; gapstart = 0x10000000;
#endif #endif
...@@ -649,7 +650,8 @@ __init void e820__setup_pci_gap(void) ...@@ -649,7 +650,8 @@ __init void e820__setup_pci_gap(void)
*/ */
pci_mem_start = gapstart; pci_mem_start = gapstart;
pr_info("e820: [mem %#010lx-%#010lx] available for PCI devices\n", gapstart, gapstart + gapsize - 1); pr_info("[mem %#010lx-%#010lx] available for PCI devices\n",
gapstart, gapstart + gapsize - 1);
} }
/* /*
...@@ -711,7 +713,7 @@ void __init e820__memory_setup_extended(u64 phys_addr, u32 data_len) ...@@ -711,7 +713,7 @@ void __init e820__memory_setup_extended(u64 phys_addr, u32 data_len)
memcpy(e820_table_firmware, e820_table, sizeof(*e820_table_firmware)); memcpy(e820_table_firmware, e820_table, sizeof(*e820_table_firmware));
early_memunmap(sdata, data_len); early_memunmap(sdata, data_len);
pr_info("e820: extended physical RAM map:\n"); pr_info("extended physical RAM map:\n");
e820__print_table("extended"); e820__print_table("extended");
} }
...@@ -780,7 +782,7 @@ u64 __init e820__memblock_alloc_reserved(u64 size, u64 align) ...@@ -780,7 +782,7 @@ u64 __init e820__memblock_alloc_reserved(u64 size, u64 align)
addr = __memblock_alloc_base(size, align, MEMBLOCK_ALLOC_ACCESSIBLE); addr = __memblock_alloc_base(size, align, MEMBLOCK_ALLOC_ACCESSIBLE);
if (addr) { if (addr) {
e820__range_update_kexec(addr, size, E820_TYPE_RAM, E820_TYPE_RESERVED); e820__range_update_kexec(addr, size, E820_TYPE_RAM, E820_TYPE_RESERVED);
pr_info("e820: update e820_table_kexec for e820__memblock_alloc_reserved()\n"); pr_info("update e820_table_kexec for e820__memblock_alloc_reserved()\n");
e820__update_table_kexec(); e820__update_table_kexec();
} }
...@@ -830,7 +832,7 @@ static unsigned long __init e820_end_pfn(unsigned long limit_pfn, enum e820_type ...@@ -830,7 +832,7 @@ static unsigned long __init e820_end_pfn(unsigned long limit_pfn, enum e820_type
if (last_pfn > max_arch_pfn) if (last_pfn > max_arch_pfn)
last_pfn = max_arch_pfn; last_pfn = max_arch_pfn;
pr_info("e820: last_pfn = %#lx max_arch_pfn = %#lx\n", pr_info("last_pfn = %#lx max_arch_pfn = %#lx\n",
last_pfn, max_arch_pfn); last_pfn, max_arch_pfn);
return last_pfn; return last_pfn;
} }
...@@ -1005,7 +1007,7 @@ void __init e820__finish_early_params(void) ...@@ -1005,7 +1007,7 @@ void __init e820__finish_early_params(void)
if (e820__update_table(e820_table) < 0) if (e820__update_table(e820_table) < 0)
early_panic("Invalid user supplied memory map"); early_panic("Invalid user supplied memory map");
pr_info("e820: user-defined physical RAM map:\n"); pr_info("user-defined physical RAM map:\n");
e820__print_table("user"); e820__print_table("user");
} }
} }
...@@ -1238,7 +1240,7 @@ void __init e820__memory_setup(void) ...@@ -1238,7 +1240,7 @@ void __init e820__memory_setup(void)
memcpy(e820_table_kexec, e820_table, sizeof(*e820_table_kexec)); memcpy(e820_table_kexec, e820_table, sizeof(*e820_table_kexec));
memcpy(e820_table_firmware, e820_table, sizeof(*e820_table_firmware)); memcpy(e820_table_firmware, e820_table, sizeof(*e820_table_firmware));
pr_info("e820: BIOS-provided physical RAM map:\n"); pr_info("BIOS-provided physical RAM map:\n");
e820__print_table(who); e820__print_table(who);
} }
......
...@@ -28,8 +28,6 @@ ...@@ -28,8 +28,6 @@
#include <asm/irq_remapping.h> #include <asm/irq_remapping.h>
#include <asm/early_ioremap.h> #include <asm/early_ioremap.h>
#define dev_err(msg) pr_err("pci 0000:%02x:%02x.%d: %s", bus, slot, func, msg)
static void __init fix_hypertransport_config(int num, int slot, int func) static void __init fix_hypertransport_config(int num, int slot, int func)
{ {
u32 htcfg; u32 htcfg;
...@@ -617,7 +615,8 @@ static void __init apple_airport_reset(int bus, int slot, int func) ...@@ -617,7 +615,8 @@ static void __init apple_airport_reset(int bus, int slot, int func)
pmcsr = read_pci_config_16(bus, slot, func, BCM4331_PM_CAP + PCI_PM_CTRL); pmcsr = read_pci_config_16(bus, slot, func, BCM4331_PM_CAP + PCI_PM_CTRL);
if ((pmcsr & PCI_PM_CTRL_STATE_MASK) != PCI_D0) { if ((pmcsr & PCI_PM_CTRL_STATE_MASK) != PCI_D0) {
dev_err("Cannot power up Apple AirPort card\n"); pr_err("pci 0000:%02x:%02x.%d: Cannot power up Apple AirPort card\n",
bus, slot, func);
return; return;
} }
} }
...@@ -628,7 +627,8 @@ static void __init apple_airport_reset(int bus, int slot, int func) ...@@ -628,7 +627,8 @@ static void __init apple_airport_reset(int bus, int slot, int func)
mmio = early_ioremap(addr, BCM4331_MMIO_SIZE); mmio = early_ioremap(addr, BCM4331_MMIO_SIZE);
if (!mmio) { if (!mmio) {
dev_err("Cannot iomap Apple AirPort card\n"); pr_err("pci 0000:%02x:%02x.%d: Cannot iomap Apple AirPort card\n",
bus, slot, func);
return; return;
} }
......
...@@ -975,8 +975,7 @@ int __init hpet_enable(void) ...@@ -975,8 +975,7 @@ int __init hpet_enable(void)
cfg &= ~(HPET_CFG_ENABLE | HPET_CFG_LEGACY); cfg &= ~(HPET_CFG_ENABLE | HPET_CFG_LEGACY);
hpet_writel(cfg, HPET_CFG); hpet_writel(cfg, HPET_CFG);
if (cfg) if (cfg)
pr_warn("HPET: Unrecognized bits %#x set in global cfg\n", pr_warn("Unrecognized bits %#x set in global cfg\n", cfg);
cfg);
for (i = 0; i <= last; ++i) { for (i = 0; i <= last; ++i) {
cfg = hpet_readl(HPET_Tn_CFG(i)); cfg = hpet_readl(HPET_Tn_CFG(i));
...@@ -988,7 +987,7 @@ int __init hpet_enable(void) ...@@ -988,7 +987,7 @@ int __init hpet_enable(void)
| HPET_TN_64BIT_CAP | HPET_TN_32BIT | HPET_TN_ROUTE | HPET_TN_64BIT_CAP | HPET_TN_32BIT | HPET_TN_ROUTE
| HPET_TN_FSB | HPET_TN_FSB_CAP); | HPET_TN_FSB | HPET_TN_FSB_CAP);
if (cfg) if (cfg)
pr_warn("HPET: Unrecognized bits %#x set in cfg#%u\n", pr_warn("Unrecognized bits %#x set in cfg#%u\n",
cfg, i); cfg, i);
} }
hpet_print_config(); hpet_print_config();
......
...@@ -1083,8 +1083,8 @@ arch_uretprobe_hijack_return_addr(unsigned long trampoline_vaddr, struct pt_regs ...@@ -1083,8 +1083,8 @@ arch_uretprobe_hijack_return_addr(unsigned long trampoline_vaddr, struct pt_regs
return orig_ret_vaddr; return orig_ret_vaddr;
if (nleft != rasize) { if (nleft != rasize) {
pr_err("uprobe: return address clobbered: pid=%d, %%sp=%#lx, " pr_err("return address clobbered: pid=%d, %%sp=%#lx, %%ip=%#lx\n",
"%%ip=%#lx\n", current->pid, regs->sp, regs->ip); current->pid, regs->sp, regs->ip);
force_sig_info(SIGSEGV, SEND_SIG_FORCED, current); force_sig_info(SIGSEGV, SEND_SIG_FORCED, current);
} }
......
...@@ -136,13 +136,13 @@ static int __init numa_add_memblk_to(int nid, u64 start, u64 end, ...@@ -136,13 +136,13 @@ static int __init numa_add_memblk_to(int nid, u64 start, u64 end,
/* whine about and ignore invalid blks */ /* whine about and ignore invalid blks */
if (start > end || nid < 0 || nid >= MAX_NUMNODES) { if (start > end || nid < 0 || nid >= MAX_NUMNODES) {
pr_warning("NUMA: Warning: invalid memblk node %d [mem %#010Lx-%#010Lx]\n", pr_warn("Warning: invalid memblk node %d [mem %#010Lx-%#010Lx]\n",
nid, start, end - 1); nid, start, end - 1);
return 0; return 0;
} }
if (mi->nr_blks >= NR_NODE_MEMBLKS) { if (mi->nr_blks >= NR_NODE_MEMBLKS) {
pr_err("NUMA: too many memblk ranges\n"); pr_err("too many memblk ranges\n");
return -EINVAL; return -EINVAL;
} }
...@@ -267,12 +267,12 @@ int __init numa_cleanup_meminfo(struct numa_meminfo *mi) ...@@ -267,12 +267,12 @@ int __init numa_cleanup_meminfo(struct numa_meminfo *mi)
*/ */
if (bi->end > bj->start && bi->start < bj->end) { if (bi->end > bj->start && bi->start < bj->end) {
if (bi->nid != bj->nid) { if (bi->nid != bj->nid) {
pr_err("NUMA: node %d [mem %#010Lx-%#010Lx] overlaps with node %d [mem %#010Lx-%#010Lx]\n", pr_err("node %d [mem %#010Lx-%#010Lx] overlaps with node %d [mem %#010Lx-%#010Lx]\n",
bi->nid, bi->start, bi->end - 1, bi->nid, bi->start, bi->end - 1,
bj->nid, bj->start, bj->end - 1); bj->nid, bj->start, bj->end - 1);
return -EINVAL; return -EINVAL;
} }
pr_warning("NUMA: Warning: node %d [mem %#010Lx-%#010Lx] overlaps with itself [mem %#010Lx-%#010Lx]\n", pr_warn("Warning: node %d [mem %#010Lx-%#010Lx] overlaps with itself [mem %#010Lx-%#010Lx]\n",
bi->nid, bi->start, bi->end - 1, bi->nid, bi->start, bi->end - 1,
bj->start, bj->end - 1); bj->start, bj->end - 1);
} }
...@@ -364,7 +364,7 @@ static int __init numa_alloc_distance(void) ...@@ -364,7 +364,7 @@ static int __init numa_alloc_distance(void)
phys = memblock_find_in_range(0, PFN_PHYS(max_pfn_mapped), phys = memblock_find_in_range(0, PFN_PHYS(max_pfn_mapped),
size, PAGE_SIZE); size, PAGE_SIZE);
if (!phys) { if (!phys) {
pr_warning("NUMA: Warning: can't allocate distance table!\n"); pr_warn("Warning: can't allocate distance table!\n");
/* don't retry until explicitly reset */ /* don't retry until explicitly reset */
numa_distance = (void *)1LU; numa_distance = (void *)1LU;
return -ENOMEM; return -ENOMEM;
...@@ -410,14 +410,14 @@ void __init numa_set_distance(int from, int to, int distance) ...@@ -410,14 +410,14 @@ void __init numa_set_distance(int from, int to, int distance)
if (from >= numa_distance_cnt || to >= numa_distance_cnt || if (from >= numa_distance_cnt || to >= numa_distance_cnt ||
from < 0 || to < 0) { from < 0 || to < 0) {
pr_warn_once("NUMA: Warning: node ids are out of bound, from=%d to=%d distance=%d\n", pr_warn_once("Warning: node ids are out of bound, from=%d to=%d distance=%d\n",
from, to, distance); from, to, distance);
return; return;
} }
if ((u8)distance != distance || if ((u8)distance != distance ||
(from == to && distance != LOCAL_DISTANCE)) { (from == to && distance != LOCAL_DISTANCE)) {
pr_warn_once("NUMA: Warning: invalid distance parameter, from=%d to=%d distance=%d\n", pr_warn_once("Warning: invalid distance parameter, from=%d to=%d distance=%d\n",
from, to, distance); from, to, distance);
return; return;
} }
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment