summaryrefslogtreecommitdiffstats
path: root/fs/f2fs/debug.c
AgeCommit message (Expand)Author
2015-02-11f2fs: avoid variable length arrayJaegeuk Kim
2015-02-11f2fs: show the number of writeback pages in statJaegeuk Kim
2015-02-11f2fs: update memory footprint informationJaegeuk Kim
2015-02-11f2fs: fix wrong memory footprint statistics in debugfsChao Yu
2015-01-09f2fs: add nat/sit entries into statusJaegeuk Kim
2015-01-09f2fs: reuse inode_entry_slab in gc procedure for using slab more effectivelyChao Yu
2015-01-09f2fs: add block count by in-place-update in stat infoChangman Lee
2014-12-08f2fs: use atomic for counting inode with inline_{dir,inode} flagChao Yu
2014-12-08f2fs: count the number of inmemory pagesJaegeuk Kim
2014-11-19f2fs: introduce struct inode_management to wrap inner fieldsChao Yu
2014-11-06f2fs: introduce the number of inode entriesJaegeuk Kim
2014-11-03f2fs: add stat info for inline_dentry inodesJaegeuk Kim
2014-09-30f2fs: check the use of macros on block counts and addressesJaegeuk Kim
2014-08-19f2fs: fix typoarter97
2014-07-29f2fs: add infra for ino managementJaegeuk Kim
2014-07-11f2fs: cleanup the needless return of f2fs_create_root_statsGu Zheng
2014-03-20f2fs: remove unnecessary thresholdJaegeuk Kim
2014-02-24f2fs: implement a lock-free stat_showJaegeuk Kim
2014-02-17f2fs: show counts of checkpoint in statusChangman Lee
2014-01-22f2fs: introduce NODE_MAPPING for code consistencyJaegeuk Kim
2014-01-22f2fs: add help function META_MAPPINGGu Zheng
2014-01-20f2fs: clean checkpatch warningsChris Fries
2014-01-14f2fs: add delimiter to seperate name and value in debug phraseChangman Lee
2014-01-06f2fs: add the number of inline_data files to status infoJaegeuk Kim
2013-12-23f2fs: replace the debugfs_root with f2fs_debugfs_rootYounger Liu
2013-12-23f2fs: remove debufs dir if debugfs_create_file() failedYounger Liu
2013-07-30f2fs: use seq_puts()/seq_putc() rather than seq_printf() where possibleGu Zheng
2013-07-30f2fs: add a help func F2FS_STAT() to get the f2fs_stat_infoGu Zheng
2013-05-28f2fs: use list_for_each_entry rather than list_for_each_entry_safemajianpeng
2013-04-30f2fs: remove useless #include <linux/proc_fs.h> as we're now using sysfs as d...Haicheng Li
2013-04-03f2fs: change GC bitmaps to apply the section granularityJaegeuk Kim
2013-04-03f2fs: introduce TOTAL_SECS macroJaegeuk Kim
2013-02-12f2fs: add device name in debugfsmajianpeng
2013-01-15f2fs: fix the debugfs entry creation pathNamjae Jeon
2013-01-15f2fs: add global mutex_lock to protect f2fs_stat_listmajianpeng
2013-01-04f2fs: update f2fs partition info about SIT/NAT layoutHuajun Li
2012-12-11f2fs: adjust kernel coding styleJaegeuk Kim
2012-12-11f2fs: fix endian conversion bugs reported by sparseJaegeuk Kim
2012-12-11f2fs: move proc files to debugfsGreg Kroah-Hartman
t;membase + offset); case UPIO_MEM16: return readw(port->membase + offset); case UPIO_MEM32: return readl(port->membase + offset); case UPIO_MEM32BE: return ioread32be(port->membase + offset); case UPIO_PORT: return inb(port->iobase + offset); case UPIO_AU: return port->serial_in(port, reg_offset); default: return 0; } } static void serial8250_early_out(struct uart_port *port, int offset, int value) { int reg_offset = offset; offset <<= port->regshift; switch (port->iotype) { case UPIO_MEM: writeb(value, port->membase + offset); break; case UPIO_MEM16: writew(value, port->membase + offset); break; case UPIO_MEM32: writel(value, port->membase + offset); break; case UPIO_MEM32BE: iowrite32be(value, port->membase + offset); break; case UPIO_PORT: outb(value, port->iobase + offset); break; case UPIO_AU: port->serial_out(port, reg_offset, value); break; } } #define BOTH_EMPTY (UART_LSR_TEMT | UART_LSR_THRE) static void serial_putc(struct uart_port *port, int c) { unsigned int status; serial8250_early_out(port, UART_TX, c); for (;;) { status = serial8250_early_in(port, UART_LSR); if ((status & BOTH_EMPTY) == BOTH_EMPTY) break; cpu_relax(); } } static void early_serial8250_write(struct console *console, const char *s, unsigned int count) { struct earlycon_device *device = console->data; struct uart_port *port = &device->port; uart_console_write(port, s, count, serial_putc); } static void __init init_port(struct earlycon_device *device) { struct uart_port *port = &device->port; unsigned int divisor; unsigned char c; unsigned int ier; serial8250_early_out(port, UART_LCR, 0x3); /* 8n1 */ ier = serial8250_early_in(port, UART_IER); serial8250_early_out(port, UART_IER, ier & UART_IER_UUE); /* no interrupt */ serial8250_early_out(port, UART_FCR, 0); /* no fifo */ serial8250_early_out(port, UART_MCR, 0x3); /* DTR + RTS */ if (port->uartclk) { divisor = DIV_ROUND_CLOSEST(port->uartclk, 16 * device->baud); c = serial8250_early_in(port, UART_LCR); serial8250_early_out(port, UART_LCR, c | UART_LCR_DLAB); serial8250_early_out(port, UART_DLL, divisor & 0xff); serial8250_early_out(port, UART_DLM, (divisor >> 8) & 0xff); serial8250_early_out(port, UART_LCR, c & ~UART_LCR_DLAB); } } int __init early_serial8250_setup(struct earlycon_device *device, const char *options) { if (!(device->port.membase || device->port.iobase)) return -ENODEV; if (!device->baud) { struct uart_port *port = &device->port; unsigned int ier; /* assume the device was initialized, only mask interrupts */ ier = serial8250_early_in(port, UART_IER); serial8250_early_out(port, UART_IER, ier & UART_IER_UUE); } else init_port(device); device->con->write = early_serial8250_write; return 0; } EARLYCON_DECLARE(uart8250, early_serial8250_setup); EARLYCON_DECLARE(uart, early_serial8250_setup); OF_EARLYCON_DECLARE(ns16550, "ns16550", early_serial8250_setup); OF_EARLYCON_DECLARE(ns16550a, "ns16550a", early_serial8250_setup); OF_EARLYCON_DECLARE(uart, "nvidia,tegra20-uart", early_serial8250_setup); OF_EARLYCON_DECLARE(uart, "snps,dw-apb-uart", early_serial8250_setup); #ifdef CONFIG_SERIAL_8250_OMAP static int __init early_omap8250_setup(struct earlycon_device *device, const char *options) { struct uart_port *port = &device->port; if (!(device->port.membase || device->port.iobase)) return -ENODEV; port->regshift = 2; device->con->write = early_serial8250_write; return 0; } OF_EARLYCON_DECLARE(omap8250, "ti,omap2-uart", early_omap8250_setup); OF_EARLYCON_DECLARE(omap8250, "ti,omap3-uart", early_omap8250_setup); OF_EARLYCON_DECLARE(omap8250, "ti,omap4-uart", early_omap8250_setup); #endif #ifdef CONFIG_SERIAL_8250_RT288X unsigned int au_serial_in(struct uart_port *p, int offset); void au_serial_out(struct uart_port *p, int offset, int value); static int __init early_au_setup(struct earlycon_device *dev, const char *opt) { dev->port.serial_in = au_serial_in; dev->port.serial_out = au_serial_out; dev->port.iotype = UPIO_AU; dev->con->write = early_serial8250_write; return 0; } OF_EARLYCON_DECLARE(palmchip, "ralink,rt2880-uart", early_au_setup); #endif