summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'sys-process/latencytop/files/latencytop-0.5-fsync-drop.patch')
-rw-r--r--sys-process/latencytop/files/latencytop-0.5-fsync-drop.patch460
1 files changed, 460 insertions, 0 deletions
diff --git a/sys-process/latencytop/files/latencytop-0.5-fsync-drop.patch b/sys-process/latencytop/files/latencytop-0.5-fsync-drop.patch
new file mode 100644
index 000000000000..ad7bda8f949d
--- /dev/null
+++ b/sys-process/latencytop/files/latencytop-0.5-fsync-drop.patch
@@ -0,0 +1,460 @@
+https://src.fedoraproject.org/rpms/latencytop/blob/rawhide/f/latencytop-remove-the-fsync-view.patch
+https://bugs.gentoo.org/742419
+
+From a4a1eb20492773d48bd83087157149c5fb9a257a Mon Sep 17 00:00:00 2001
+From: Michal Schmidt <mschmidt@redhat.com>
+Date: Wed, 15 Feb 2012 23:44:18 +0100
+Subject: [PATCH 1/2] remove the fsync view
+
+The fsync tracer it depends on was never merged in the kernel.
+It also uses 'tracing_enable' which triggers deprecation warnings in the
+kernel.
+--- a/Makefile
++++ b/Makefile
+@@ -6,7 +6,7 @@ SBINDIR = /usr/sbin
+ XCFLAGS = -W -g `pkg-config --cflags glib-2.0` -D_FORTIFY_SOURCE=2 -Wno-sign-compare
+ LDF = -Wl,--as-needed `pkg-config --libs glib-2.0` -lncursesw
+
+-OBJS= latencytop.o text_display.o translate.o fsync.o
++OBJS= latencytop.o text_display.o translate.o
+
+ ifdef HAS_GTK_GUI
+ XCFLAGS += `pkg-config --cflags gtk+-2.0` -DHAS_GTK_GUI
+--- a/fsync.c
++++ /dev/null
+@@ -1,369 +0,0 @@
+-/*
+- * Copyright 2008, Intel Corporation
+- *
+- * This file is part of LatencyTOP
+- *
+- * This program file is free software; you can redistribute it and/or modify it
+- * under the terms of the GNU General Public License as published by the
+- * Free Software Foundation; version 2 of the License.
+- *
+- * This program is distributed in the hope that it will be useful, but WITHOUT
+- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+- * for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program in a file named COPYING; if not, write to the
+- * Free Software Foundation, Inc.,
+- * 51 Franklin Street, Fifth Floor,
+- * Boston, MA 02110-1301 USA
+- *
+- * Authors:
+- * Arjan van de Ven <arjan@linux.intel.com>
+- */
+-
+-#define _GNU_SOURCE
+-
+-#include <stdio.h>
+-#include <stdlib.h>
+-#include <unistd.h>
+-#include <string.h>
+-#include <ncurses.h>
+-#include <time.h>
+-#include <wchar.h>
+-#include <ctype.h>
+-
+-#include <glib.h>
+-
+-#include "latencytop.h"
+-
+-struct fsync_process {
+- char name[PATH_MAX];
+- int fsync_count;
+- GList *files;
+-};
+-
+-struct fsync_files {
+- char name[PATH_MAX];
+- int fsync_count;
+-};
+-
+-static GList *fsync_data;
+-
+-
+-static chain_file(struct fsync_process *proc, char *filename)
+-{
+- struct fsync_files *file;
+- GList *item;
+-
+- proc->fsync_count++;
+- item = proc->files;
+- while (item) {
+- file = item->data;
+- item = g_list_next(item);
+- if (strcmp(file->name, filename)==0) {
+- file->fsync_count++;
+- return;
+- }
+- }
+- file = malloc(sizeof(struct fsync_files));
+- if (!file)
+- return;
+- memset(file, 0, sizeof(struct fsync_files));
+- strncpy(file->name, filename, PATH_MAX-1);
+- file->fsync_count = 1;
+- proc->files = g_list_append(proc->files, file);
+-}
+-
+-static report_file(char *process, char *file)
+-{
+- struct fsync_process *proc;
+- GList *item;
+-
+- item = fsync_data;
+- while (item) {
+- proc = item->data;
+- item = g_list_next(item);
+- if (strcmp(proc->name, process) == 0) {
+- chain_file(proc, file);
+- return;
+- }
+- }
+-
+- proc = malloc(sizeof(struct fsync_process));
+- if (!proc)
+- return;
+- memset(proc, 0, sizeof(struct fsync_process));
+- strncpy(proc->name, process, PATH_MAX-1);
+- chain_file(proc, file);
+- fsync_data = g_list_append(fsync_data, proc);
+-}
+-
+-static gint sort_files(gconstpointer A, gconstpointer B)
+-{
+- struct fsync_files *a = (struct fsync_files *)A;
+- struct fsync_files *b = (struct fsync_files *)B;
+- return a->fsync_count < b->fsync_count;
+-}
+-
+-static gint sort_process(gconstpointer A, gconstpointer B)
+-{
+- struct fsync_process *a = (struct fsync_process *)A;
+- struct fsync_process *b = (struct fsync_process *)B;
+- return a->fsync_count < b->fsync_count;
+-}
+-
+-static void sort_the_lot(void)
+-{
+- GList *item;
+- struct fsync_process *proc;
+-
+- item = fsync_data = g_list_sort(fsync_data, sort_process);
+- while (item) {
+- proc = item->data;
+- item = g_list_next(item);
+- proc->files = g_list_sort(proc->files, sort_files);
+- }
+-}
+-
+-
+-
+-static void write_to_file(char *filename, char *value)
+-{
+- FILE *file;
+- file = fopen(filename, "w");
+- if (!file)
+- return;
+- fprintf(file,"%s\n", value);
+- fclose(file);
+-}
+-
+-
+-int enable_fsync_tracer(void)
+-{
+- int ret;
+-/*
+- * Steps to do:
+- *
+- * mount -t debugfs none /sys/kernel/debug/
+- * cd /sys/kernel/debug/tracing
+- * echo fsync > current_tracer
+- * echo ftrace_printk > iter_ctrl
+- * echo 1 > tracing_enabled
+- */
+- ret = system("/bin/mount -t debugfs none /sys/kernel/debug/");
+- if (!ret)
+- return -1;
+- write_to_file("/sys/kernel/debug/tracing/current_tracer", "fsync");
+- write_to_file("/sys/kernel/debug/tracing/iter_ctrl", "ftrace_printk");
+- write_to_file("/sys/kernel/debug/tracing/tracing_enabled", "1");
+-}
+-
+-int disable_fsync_tracer(void)
+-{
+- write_to_file("/sys/kernel/debug/tracing/tracing_enabled", "0");
+-}
+-
+-
+-static WINDOW *title_bar_window;
+-static WINDOW *global_window;
+-
+-
+-static void fsync_cleanup_curses(void)
+-{
+- endwin();
+-}
+-
+-
+-static void zap_windows(void)
+-{
+- if (title_bar_window) {
+- delwin(title_bar_window);
+- title_bar_window = NULL;
+- }
+- if (global_window) {
+- delwin(global_window);
+- global_window = NULL;
+- }
+-}
+-
+-
+-static int maxx, maxy;
+-
+-static void fsync_setup_windows(void)
+-{
+- int midy;
+- getmaxyx(stdscr, maxy, maxx);
+-
+- zap_windows();
+-
+- title_bar_window = subwin(stdscr, 1, maxx, 0, 0);
+- global_window = subwin(stdscr, maxy-3 , maxx, 2, 0);
+-
+- werase(stdscr);
+- refresh();
+-}
+-
+-#if 0 /* Dead code */
+-static void fsync_initialize_curses(void)
+-{
+- if (noui)
+- return;
+- initscr();
+- start_color();
+- keypad(stdscr, TRUE); /* enable keyboard mapping */
+- nonl(); /* tell curses not to do NL->CR/NL on output */
+- cbreak(); /* take input chars one at a time, no wait for \n */
+- noecho(); /* dont echo input */
+- curs_set(0); /* turn off cursor */
+- use_default_colors();
+-
+- init_pair(PT_COLOR_DEFAULT, COLOR_WHITE, COLOR_BLACK);
+- init_pair(PT_COLOR_HEADER_BAR, COLOR_BLACK, COLOR_WHITE);
+- init_pair(PT_COLOR_ERROR, COLOR_BLACK, COLOR_RED);
+- init_pair(PT_COLOR_RED, COLOR_WHITE, COLOR_RED);
+- init_pair(PT_COLOR_YELLOW, COLOR_WHITE, COLOR_YELLOW);
+- init_pair(PT_COLOR_GREEN, COLOR_WHITE, COLOR_GREEN);
+- init_pair(PT_COLOR_BRIGHT, COLOR_WHITE, COLOR_BLACK);
+-
+- atexit(cleanup_curses);
+-}
+-#endif
+-
+-static void show_title_bar(void)
+-{
+- wattrset(title_bar_window, COLOR_PAIR(PT_COLOR_HEADER_BAR));
+- wbkgd(title_bar_window, COLOR_PAIR(PT_COLOR_HEADER_BAR));
+- werase(title_bar_window);
+-
+- mvwprintw(title_bar_window, 0, 0, " LatencyTOP -- fsync() view... type 'F' to exit");
+-
+- wrefresh(title_bar_window);
+-}
+-
+-
+-
+-static void print_global_list(void)
+-{
+- GList *item, *item2;
+- struct fsync_process *proc;
+- struct fsync_files *file;
+- int i = 1, i2 = 0;
+- int y = 1;
+-
+- werase(global_window);
+-
+-
+- mvwprintw(global_window, 0, 0, "Process File");
+- item = g_list_first(fsync_data);
+- while (item && i < maxy-6) {
+- proc = item->data;
+- item = g_list_next(item);
+-
+- mvwprintw(global_window, y, 0, "%s (%i)", proc->name, proc->fsync_count);
+- y++;
+- item2 = proc->files;
+- while (item2 && i2 < 5) {
+- file = item2->data;
+- item2 = g_list_next(item2);
+- mvwprintw(global_window, y, 10, "%s (%i)", file->name, file->fsync_count);
+- y++;
+- i2++;
+- }
+- i++;
+- y++;
+- }
+- wrefresh(global_window);
+-
+-}
+-
+-static void parse_ftrace(void)
+-{
+- FILE *file;
+- char line[PATH_MAX];
+- file = fopen("/sys/kernel/debug/tracing/trace", "r");
+- if (!file)
+- return;
+- while (!feof(file)) {
+- char *c, *c2;
+- memset(line, 0, PATH_MAX);
+- fgets(line, PATH_MAX-1, file);
+- c = strchr(line, '\n');
+- if (c) *c = 0;
+- c = strstr(line, "probe_do_fsync: Process ");
+- if (!c)
+- continue;
+- c += 24;
+- c2 = strchr(c, ' ');
+- if (!c2)
+- continue;
+- *c2 = 0;
+- c2++;
+- c2 = strstr(c2, "fsync on ");
+- if (!c2)
+- continue;
+- c2 += 9;
+- report_file(c, c2);
+- }
+- fclose(file);
+- sort_the_lot();
+-}
+-
+-
+-int fsync_display(int duration)
+-{
+- struct timeval start,end,now;
+- int key;
+- fd_set rfds;
+- int curduration;
+-
+- fsync_setup_windows();
+- show_title_bar();
+- curduration = 3;
+- if (curduration > duration)
+- curduration = duration;
+- parse_ftrace();
+- print_global_list();
+- while (1) {
+- FD_ZERO(&rfds);
+- FD_SET(0, &rfds);
+- gettimeofday(&start, NULL);
+- gettimeofday(&now, NULL);
+- end.tv_sec = start.tv_sec + curduration - now.tv_sec;
+- end.tv_usec = start.tv_usec - now.tv_usec;
+- while (end.tv_usec < 0) {
+- end.tv_sec --;
+- end.tv_usec += 1000000;
+- };
+- curduration = duration;
+- if (curduration > 5)
+- curduration = 5;
+- /* clear the ftrace buffer */
+- write_to_file("/sys/kernel/debug/tracing/tracing_enabled", "0");
+- write_to_file("/sys/kernel/debug/tracing/tracing_enabled", "1");
+- key = select(1, &rfds, NULL, NULL, &end);
+- parse_ftrace();
+- print_global_list();
+-
+- if (key) {
+- char keychar;
+- keychar = fgetc(stdin);
+- if (keychar == 27) {
+- keychar = fgetc(stdin);
+- if (keychar==79)
+- keychar = fgetc(stdin);
+- }
+- keychar = toupper(keychar);
+- if (keychar == 'F') {
+- fsync_cleanup_curses();
+- return 1;
+- }
+- if (keychar == 'Q') {
+- fsync_cleanup_curses();
+- return 0;
+- }
+- }
+- }
+-
+- return 1;
+-}
+--- a/latencytop.8
++++ b/latencytop.8
+@@ -42,10 +42,6 @@ followed by a letter, then only active processes starting with that lettter
+ are displayed and walked. If you press \fBs\fP followed by \fB0\fP then
+ that filter is reset.
+
+-If you press \fBf\fP then \fBLatencyTop\fP displays a list of all processes
+-currently waiting for an \fBfsync\fP to finish. Pressing \fBf\fP again
+-returns you to the normal operating mode of \fBLatencyTop\fP.
+-
+ .SH SEE ALSO
+ .BR powertop (1)
+ .br
+--- a/latencytop.c
++++ b/latencytop.c
+@@ -532,7 +532,6 @@ void update_list(void)
+ static void cleanup_sysctl(void)
+ {
+ disable_sysctl();
+- disable_fsync_tracer();
+ }
+
+ int main(int argc, char **argv)
+@@ -540,7 +539,6 @@ int main(int argc, char **argv)
+ int i, use_gtk = 0;
+
+ enable_sysctl();
+- enable_fsync_tracer();
+ atexit(cleanup_sysctl);
+
+ #ifdef HAS_GTK_GUI
+--- a/latencytop.h
++++ b/latencytop.h
+@@ -53,7 +53,4 @@ extern void start_text_ui(void);
+
+ extern char *translate(char *line);
+ extern void init_translations(char *filename);
+-extern int fsync_display(int duration);
+-extern int enable_fsync_tracer(void);
+-extern int disable_fsync_tracer(void);
+ extern void update_list(void);
+--- a/latencytop.trans
++++ b/latencytop.trans
+@@ -142,5 +142,5 @@
+ 5 sys_nanosleep Application requested delay
+ 5 sys_pause Application requested delay
+ 5 evdev_read Reading keyboard/mouse input
+-5 do_fsync fsync() on a file (type 'F' for details)
++5 do_fsync fsync() on a file
+ 5 __log_wait_for_space Waiting for EXT3 journal space
+--- a/text_display.c
++++ b/text_display.c
+@@ -378,13 +378,6 @@ static int update_display(int duration, char *filterchar)
+ else if (keychar == '0')
+ *filterchar = '\0';
+ }
+- if (keychar == 'F') {
+- endwin();
+- if (!fsync_display(duration))
+- return 0;
+- setup_windows();
+- show_title_bar();
+- }
+ if (keychar < 32)
+ repaint = 0;
+ }