diff --git a/.bcc.metadata b/.bcc.metadata
index 4c0f80b..0e97130 100644
--- a/.bcc.metadata
+++ b/.bcc.metadata
@@ -1 +1 @@
-168b517240fd27aaa48f480d2470907fe1875dac SOURCES/bcc-0.8.0.tar.gz
+70e35f9ad5989dfeab4c0e87b98602e78493a730 SOURCES/bcc-0.10.0.tar.gz
diff --git a/.gitignore b/.gitignore
index 8294aed..4f367d3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1 @@
-SOURCES/bcc-0.8.0.tar.gz
+SOURCES/bcc-0.10.0.tar.gz
diff --git a/SOURCES/Disable-tests-cc.patch b/SOURCES/Disable-tests-cc.patch
deleted file mode 100644
index 8661bf3..0000000
--- a/SOURCES/Disable-tests-cc.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From b3faa19c61a5a5385899a80bdd0d6a3052f1415a Mon Sep 17 00:00:00 2001
-From: Jerome Marchand <jmarchan@redhat.com>
-Date: Thu, 24 May 2018 16:11:30 +0200
-Subject: [PATCH] Disable tests/cc
-
-Some files in tests/cc/ don't compile on s390x. We can just disable
-them until a better fix is available: the build target are not
-installed anyway.
-
----
- tests/CMakeLists.txt | 1 -
- 1 file changed, 1 deletion(-)
-
-diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
-index 86abec9..48e9029 100644
---- a/tests/CMakeLists.txt
-+++ b/tests/CMakeLists.txt
-@@ -8,7 +8,6 @@ add_test(NAME style-check COMMAND ${CMAKE_SOURCE_DIR}/scripts/style-check.sh)
- set_tests_properties(style-check PROPERTIES PASS_REGULAR_EXPRESSION ".*")
- 
- if(ENABLE_CLANG_JIT)
--add_subdirectory(cc)
- add_subdirectory(python)
- add_subdirectory(lua)
- endif()
--- 
-2.13.6
-
diff --git a/SOURCES/Fix-tools-for-RHEL-7.patch b/SOURCES/Fix-tools-for-RHEL-7.patch
index 9135b3f..f6c8362 100644
--- a/SOURCES/Fix-tools-for-RHEL-7.patch
+++ b/SOURCES/Fix-tools-for-RHEL-7.patch
@@ -1,4 +1,4 @@
-From ac5050ea551af40b47bf2010e179e9020acada69 Mon Sep 17 00:00:00 2001
+From 5848b9fe9ad49151492cb2652a06921fa4b49031 Mon Sep 17 00:00:00 2001
 From: Jerome Marchand <jmarchan@redhat.com>
 Date: Thu, 16 Aug 2018 14:58:56 +0200
 Subject: [PATCH] Fix tools for RHEL 7
@@ -38,10 +38,10 @@ fixes the following:
  20 files changed, 88 insertions(+), 62 deletions(-)
 
 diff --git a/src/python/bcc/__init__.py b/src/python/bcc/__init__.py
-index 1d99afd..f38d23f 100644
+index bff5f282..19933cf7 100644
 --- a/src/python/bcc/__init__.py
 +++ b/src/python/bcc/__init__.py
-@@ -511,8 +511,11 @@ DEBUG_BPF_REGISTER_STATE = 0x10
+@@ -525,8 +525,11 @@ DEBUG_BTF = 0x20
  
      @staticmethod
      def get_kprobe_functions(event_re):
@@ -56,7 +56,7 @@ index 1d99afd..f38d23f 100644
  
          in_init_section = 0
 diff --git a/tools/btrfsdist.py b/tools/btrfsdist.py
-index a0aeb24..3f179d0 100755
+index 4659ab46..3326b67a 100755
 --- a/tools/btrfsdist.py
 +++ b/tools/btrfsdist.py
 @@ -60,6 +60,7 @@ debug = 0
@@ -96,10 +96,10 @@ index a0aeb24..3f179d0 100755
  b.attach_kretprobe(event="btrfs_sync_file", fn_name="trace_fsync_return")
  
 diff --git a/tools/btrfsslower.py b/tools/btrfsslower.py
-index cff61b8..26aff65 100755
+index bacbc06a..b650cea0 100755
 --- a/tools/btrfsslower.py
 +++ b/tools/btrfsslower.py
-@@ -63,6 +63,7 @@ debug = 0
+@@ -62,6 +62,7 @@ debug = 0
  bpf_text = """
  #include <uapi/linux/ptrace.h>
  #include <linux/fs.h>
@@ -107,7 +107,7 @@ index cff61b8..26aff65 100755
  #include <linux/sched.h>
  #include <linux/dcache.h>
  
-@@ -97,7 +98,7 @@ BPF_PERF_OUTPUT(events);
+@@ -96,7 +97,7 @@ BPF_PERF_OUTPUT(events);
  // Store timestamp and size on entry
  //
  
@@ -116,7 +116,7 @@ index cff61b8..26aff65 100755
  // own read function. So we need to trace that and then filter on btrfs, which
  // I do by checking file->f_op.
  int trace_read_entry(struct pt_regs *ctx, struct kiocb *iocb)
-@@ -124,7 +125,7 @@ int trace_read_entry(struct pt_regs *ctx, struct kiocb *iocb)
+@@ -123,7 +124,7 @@ int trace_read_entry(struct pt_regs *ctx, struct kiocb *iocb)
      return 0;
  }
  
@@ -125,7 +125,7 @@ index cff61b8..26aff65 100755
  int trace_write_entry(struct pt_regs *ctx, struct kiocb *iocb)
  {
      u64 id = bpf_get_current_pid_tgid();
-@@ -329,12 +330,12 @@ TASK_COMM_LEN = 16      # linux/sched.h
+@@ -313,12 +314,12 @@ int trace_fsync_return(struct pt_regs *ctx)
  b = BPF(text=bpf_text)
  
  # Common file functions. See earlier comment about generic_*().
@@ -143,7 +143,7 @@ index cff61b8..26aff65 100755
  b.attach_kretprobe(event="btrfs_sync_file", fn_name="trace_fsync_return")
  
 diff --git a/tools/cpudist.py b/tools/cpudist.py
-index 9e61341..e5fd550 100755
+index 4d7c9eb4..ddb675e2 100755
 --- a/tools/cpudist.py
 +++ b/tools/cpudist.py
 @@ -94,7 +94,9 @@ static inline void update_hist(u32 tgid, u32 pid, u64 ts)
@@ -158,7 +158,7 @@ index 9e61341..e5fd550 100755
      u64 ts = bpf_ktime_get_ns();
      u64 pid_tgid = bpf_get_current_pid_tgid();
 diff --git a/tools/ext4dist.py b/tools/ext4dist.py
-index b71cfda..a6a7e55 100755
+index 384a4c14..559e4a5f 100755
 --- a/tools/ext4dist.py
 +++ b/tools/ext4dist.py
 @@ -60,6 +60,7 @@ debug = 0
@@ -169,37 +169,47 @@ index b71cfda..a6a7e55 100755
  #include <linux/sched.h>
  
  #define OP_NAME_LEN 8
-@@ -81,7 +82,7 @@ int trace_entry(struct pt_regs *ctx)
-     return 0;
- }
+@@ -136,18 +137,18 @@ int trace_fsync_return(struct pt_regs *ctx)
+ """
  
--// The current ext4 (Linux 4.5) uses generic_file_read_iter(), instead of it's
-+// ext4 uses generic_file_aio_read(), instead of it's
- // own function, for reads. So we need to trace that and then filter on ext4,
- // which I do by checking file->f_op.
- int trace_read_entry(struct pt_regs *ctx, struct kiocb *iocb)
-@@ -189,12 +190,12 @@ b = BPF(text=bpf_text)
+ # Starting from Linux 4.10 ext4_file_operations.read_iter has been changed from
+-# using generic_file_read_iter() to its own ext4_file_read_iter().
++# using generic_file_aio_read() to its own ext4_file_read_iter().
+ #
+ # To detect the proper function to trace check if ext4_file_read_iter() is
+ # defined in /proc/kallsyms, if it's defined attach to that function, otherwise
+-# use generic_file_read_iter() and inside the trace hook filter on ext4 read
++# use generic_file_aio_read() and inside the trace hook filter on ext4 read
+ # events (checking if file->f_op == ext4_file_operations).
  if BPF.get_kprobe_functions(b'ext4_file_read_iter'):
- 	b.attach_kprobe(event="ext4_file_read_iter", fn_name="trace_entry")
+     ext4_read_fn = 'ext4_file_read_iter'
+     ext4_trace_read_fn = 'trace_entry'
+     ext4_trace_read_code = ''
  else:
--	b.attach_kprobe(event="generic_file_read_iter", fn_name="trace_read_entry")
+-    ext4_read_fn = 'generic_file_read_iter'
++    ext4_read_fn = 'generic_file_aio_read'
+     ext4_trace_read_fn = 'trace_read_entry'
+     ext4_file_ops_addr = ''
+     with open(kallsyms) as syms:
+@@ -194,11 +195,11 @@ bpf_text = bpf_text.replace('FACTOR', str(factor))
+ b = BPF(text=bpf_text)
+ 
+ b.attach_kprobe(event=ext4_read_fn, fn_name=ext4_trace_read_fn)
 -b.attach_kprobe(event="ext4_file_write_iter", fn_name="trace_entry")
-+	b.attach_kprobe(event="generic_file_aio_read", fn_name="trace_read_entry")
 +b.attach_kprobe(event="ext4_file_write", fn_name="trace_entry")
  b.attach_kprobe(event="ext4_file_open", fn_name="trace_entry")
  b.attach_kprobe(event="ext4_sync_file", fn_name="trace_entry")
--b.attach_kretprobe(event="generic_file_read_iter", fn_name="trace_read_return")
+ b.attach_kretprobe(event=ext4_read_fn, fn_name='trace_read_return')
 -b.attach_kretprobe(event="ext4_file_write_iter", fn_name="trace_write_return")
-+b.attach_kretprobe(event="generic_file_aio_read", fn_name="trace_read_return")
 +b.attach_kretprobe(event="ext4_file_write", fn_name="trace_write_return")
  b.attach_kretprobe(event="ext4_file_open", fn_name="trace_open_return")
  b.attach_kretprobe(event="ext4_sync_file", fn_name="trace_fsync_return")
  
 diff --git a/tools/ext4slower.py b/tools/ext4slower.py
-index 344e68f..fe90046 100755
+index 0524f22e..d5fbb661 100755
 --- a/tools/ext4slower.py
 +++ b/tools/ext4slower.py
-@@ -64,6 +64,7 @@ debug = 0
+@@ -63,6 +63,7 @@ debug = 0
  bpf_text = """
  #include <uapi/linux/ptrace.h>
  #include <linux/fs.h>
@@ -207,7 +217,7 @@ index 344e68f..fe90046 100755
  #include <linux/sched.h>
  #include <linux/dcache.h>
  
-@@ -98,7 +99,7 @@ BPF_PERF_OUTPUT(events);
+@@ -97,7 +98,7 @@ BPF_PERF_OUTPUT(events);
  // Store timestamp and size on entry
  //
  
@@ -216,7 +226,7 @@ index 344e68f..fe90046 100755
  // own function, for reads. So we need to trace that and then filter on ext4,
  // which I do by checking file->f_op.
  // The new Linux version (since form 4.10) uses ext4_file_read_iter(), And if the 'CONFIG_FS_DAX' 
-@@ -128,7 +129,7 @@ int trace_read_entry(struct pt_regs *ctx, struct kiocb *iocb)
+@@ -127,7 +128,7 @@ int trace_read_entry(struct pt_regs *ctx, struct kiocb *iocb)
      return 0;
  }
  
@@ -225,7 +235,7 @@ index 344e68f..fe90046 100755
  int trace_write_entry(struct pt_regs *ctx, struct kiocb *iocb)
  {
      u64 id = bpf_get_current_pid_tgid();
-@@ -330,15 +331,15 @@ b = BPF(text=bpf_text)
+@@ -314,15 +315,15 @@ b = BPF(text=bpf_text)
  if BPF.get_kprobe_functions(b'ext4_file_read_iter'):
      b.attach_kprobe(event="ext4_file_read_iter", fn_name="trace_read_entry")
  else:
@@ -246,10 +256,10 @@ index 344e68f..fe90046 100755
  b.attach_kretprobe(event="ext4_sync_file", fn_name="trace_fsync_return")
  
 diff --git a/tools/fileslower.py b/tools/fileslower.py
-index 219a94a..46ead05 100755
+index 31e3adf9..05582c9e 100755
 --- a/tools/fileslower.py
 +++ b/tools/fileslower.py
-@@ -124,7 +124,7 @@ int trace_read_entry(struct pt_regs *ctx, struct file *file,
+@@ -123,7 +123,7 @@ int trace_read_entry(struct pt_regs *ctx, struct file *file,
      char __user *buf, size_t count)
  {
      // skip non-sync I/O; see kernel code for __vfs_read()
@@ -258,7 +268,7 @@ index 219a94a..46ead05 100755
          return 0;
      return trace_rw_entry(ctx, file, buf, count);
  }
-@@ -133,7 +133,7 @@ int trace_write_entry(struct pt_regs *ctx, struct file *file,
+@@ -132,7 +132,7 @@ int trace_write_entry(struct pt_regs *ctx, struct file *file,
      char __user *buf, size_t count)
  {
      // skip non-sync I/O; see kernel code for __vfs_write()
@@ -267,7 +277,7 @@ index 219a94a..46ead05 100755
          return 0;
      return trace_rw_entry(ctx, file, buf, count);
  }
-@@ -200,8 +200,13 @@ b = BPF(text=bpf_text)
+@@ -199,8 +199,13 @@ b = BPF(text=bpf_text)
  # do_sync_read/do_sync_write), but those became static. So trace these from
  # the parent functions, at the cost of more overhead, instead.
  # Ultimately, we should be using [V]FS tracepoints.
@@ -284,10 +294,10 @@ index 219a94a..46ead05 100755
      b.attach_kprobe(event="__vfs_write", fn_name="trace_write_entry")
      b.attach_kretprobe(event="__vfs_write", fn_name="trace_write_return")
 diff --git a/tools/memleak.py b/tools/memleak.py
-index 4021bf8..7e70af4 100755
+index fd08bc4d..db8b927a 100755
 --- a/tools/memleak.py
 +++ b/tools/memleak.py
-@@ -355,13 +355,21 @@ TRACEPOINT_PROBE(kmem, kmem_cache_free) {
+@@ -357,13 +357,21 @@ TRACEPOINT_PROBE(kmem, kmem_cache_free) {
          return gen_free_enter((struct pt_regs *)args, (void *)args->ptr);
  }
  
@@ -312,7 +322,7 @@ index 4021bf8..7e70af4 100755
  """
  
 diff --git a/tools/mountsnoop.py b/tools/mountsnoop.py
-index b6f96ca..e2956f8 100755
+index eefb4ec7..5f3678b3 100755
 --- a/tools/mountsnoop.py
 +++ b/tools/mountsnoop.py
 @@ -24,7 +24,6 @@ bpf_text = r"""
@@ -360,10 +370,10 @@ index b6f96ca..e2956f8 100755
  
      event.type = EVENT_UMOUNT_TARGET;
 diff --git a/tools/nfsslower.py b/tools/nfsslower.py
-index 8113eff..e6c62ba 100755
+index 36918ca0..9c6d8f6c 100755
 --- a/tools/nfsslower.py
 +++ b/tools/nfsslower.py
-@@ -65,6 +65,7 @@ bpf_text = """
+@@ -64,6 +64,7 @@ bpf_text = """
  
  #include <uapi/linux/ptrace.h>
  #include <linux/fs.h>
@@ -372,7 +382,7 @@ index 8113eff..e6c62ba 100755
  #include <linux/dcache.h>
  
 diff --git a/tools/offcputime.py b/tools/offcputime.py
-index 6440260..ef328c1 100755
+index ac3b7281..ea36b264 100755
 --- a/tools/offcputime.py
 +++ b/tools/offcputime.py
 @@ -128,7 +128,9 @@ BPF_HASH(counts, struct key_t);
@@ -387,7 +397,7 @@ index 6440260..ef328c1 100755
      u32 tgid = prev->tgid;
      u64 ts, *tsp;
 diff --git a/tools/offwaketime.py b/tools/offwaketime.py
-index 3c4f0f3..89e7b60 100755
+index 4a1cebab..baa28801 100755
 --- a/tools/offwaketime.py
 +++ b/tools/offwaketime.py
 @@ -163,7 +163,9 @@ int waker(struct pt_regs *ctx, struct task_struct *p) {
@@ -402,10 +412,10 @@ index 3c4f0f3..89e7b60 100755
      u32 pid = p->pid;
      u32 tgid = p->tgid;
 diff --git a/tools/oomkill.py b/tools/oomkill.py
-index db3a537..5357d9f 100755
+index 4f3b6ce7..546c2dc6 100755
 --- a/tools/oomkill.py
 +++ b/tools/oomkill.py
-@@ -36,15 +36,15 @@ struct data_t {
+@@ -35,15 +35,15 @@ struct data_t {
  
  BPF_PERF_OUTPUT(events);
  
@@ -426,7 +436,7 @@ index db3a537..5357d9f 100755
      bpf_probe_read(&data.tcomm, sizeof(data.tcomm), p->comm);
      events.perf_submit(ctx, &data, sizeof(data));
 diff --git a/tools/runqlat.py b/tools/runqlat.py
-index 9c56d22..3a56d56 100755
+index 9fd40642..0c9bb1c4 100755
 --- a/tools/runqlat.py
 +++ b/tools/runqlat.py
 @@ -111,7 +111,7 @@ int trace_ttwu_do_wakeup(struct pt_regs *ctx, struct rq *rq, struct task_struct
@@ -439,10 +449,10 @@ index 9c56d22..3a56d56 100755
      u32 pid, tgid;
  
 diff --git a/tools/runqslower.py b/tools/runqslower.py
-index 0b3e1c1..8be9ef0 100755
+index 1d48be8a..16a5a4c2 100755
 --- a/tools/runqslower.py
 +++ b/tools/runqslower.py
-@@ -98,7 +98,7 @@ int trace_ttwu_do_wakeup(struct pt_regs *ctx, struct rq *rq, struct task_struct
+@@ -97,7 +97,7 @@ int trace_ttwu_do_wakeup(struct pt_regs *ctx, struct rq *rq, struct task_struct
  }
  
  // calculate latency
@@ -452,10 +462,10 @@ index 0b3e1c1..8be9ef0 100755
      u32 pid, tgid;
  
 diff --git a/tools/solisten.py b/tools/solisten.py
-index 81e82e0..f30a23f 100755
+index f2a0a342..16872212 100755
 --- a/tools/solisten.py
 +++ b/tools/solisten.py
-@@ -101,7 +101,7 @@ int kprobe__inet_listen(struct pt_regs *ctx, struct socket *sock, int backlog)
+@@ -100,7 +100,7 @@ int kprobe__inet_listen(struct pt_regs *ctx, struct socket *sock, int backlog)
  
          // Get network namespace id, if kernel supports it
  #ifdef CONFIG_NET_NS
@@ -465,7 +475,7 @@ index 81e82e0..f30a23f 100755
          evt.netns = 0;
  #endif
 diff --git a/tools/tcpsubnet.py b/tools/tcpsubnet.py
-index bf944e1..a054a7d 100755
+index 5f2a8062..1ba275bc 100755
 --- a/tools/tcpsubnet.py
 +++ b/tools/tcpsubnet.py
 @@ -110,8 +110,8 @@ struct index_key_t {
@@ -480,10 +490,10 @@ index bf944e1..a054a7d 100755
      u16 family = sk->__sk_common.skc_family;
  
 diff --git a/tools/tcptracer.py b/tools/tcptracer.py
-index 8f272eb..021803a 100755
+index e61fe9ba..f00f0d19 100755
 --- a/tools/tcptracer.py
 +++ b/tools/tcptracer.py
-@@ -116,7 +116,7 @@ static int read_ipv4_tuple(struct ipv4_tuple_t *tuple, struct sock *skp)
+@@ -115,7 +115,7 @@ static int read_ipv4_tuple(struct ipv4_tuple_t *tuple, struct sock *skp)
    u16 sport = sockp->inet_sport;
    u16 dport = skp->__sk_common.skc_dport;
  #ifdef CONFIG_NET_NS
@@ -492,7 +502,7 @@ index 8f272eb..021803a 100755
  #endif
  
    ##FILTER_NETNS##
-@@ -143,7 +143,7 @@ static int read_ipv6_tuple(struct ipv6_tuple_t *tuple, struct sock *skp)
+@@ -142,7 +142,7 @@ static int read_ipv6_tuple(struct ipv6_tuple_t *tuple, struct sock *skp)
    u16 sport = sockp->inet_sport;
    u16 dport = skp->__sk_common.skc_dport;
  #ifdef CONFIG_NET_NS
@@ -501,7 +511,7 @@ index 8f272eb..021803a 100755
  #endif
    bpf_probe_read(&saddr, sizeof(saddr),
                   skp->__sk_common.skc_v6_rcv_saddr.in6_u.u6_addr32);
-@@ -361,8 +361,7 @@ int trace_close_entry(struct pt_regs *ctx, struct sock *skp)
+@@ -360,8 +360,7 @@ int trace_close_entry(struct pt_regs *ctx, struct sock *skp)
    // Don't generate close events for connections that were never
    // established in the first place.
    if (oldstate == TCP_SYN_SENT ||
@@ -511,7 +521,7 @@ index 8f272eb..021803a 100755
        return 0;
  
    u8 ipver = 0;
-@@ -433,7 +432,7 @@ int trace_accept_return(struct pt_regs *ctx)
+@@ -432,7 +431,7 @@ int trace_accept_return(struct pt_regs *ctx)
  
    // Get network namespace id, if kernel supports it
  #ifdef CONFIG_NET_NS
@@ -521,7 +531,7 @@ index 8f272eb..021803a 100755
  
    ##FILTER_NETNS##
 diff --git a/tools/xfsdist.py b/tools/xfsdist.py
-index 1a7fdd9..8f2ab46 100755
+index f409f90d..2976f9e2 100755
 --- a/tools/xfsdist.py
 +++ b/tools/xfsdist.py
 @@ -137,12 +137,12 @@ bpf_text = bpf_text.replace('FACTOR', str(factor))
@@ -542,10 +552,10 @@ index 1a7fdd9..8f2ab46 100755
  b.attach_kretprobe(event="xfs_file_fsync", fn_name="trace_fsync_return")
  
 diff --git a/tools/xfsslower.py b/tools/xfsslower.py
-index 5b4e0a2..0dd75b6 100755
+index 9fa12566..0ef50f6e 100755
 --- a/tools/xfsslower.py
 +++ b/tools/xfsslower.py
-@@ -60,6 +60,7 @@ debug = 0
+@@ -59,6 +59,7 @@ debug = 0
  bpf_text = """
  #include <uapi/linux/ptrace.h>
  #include <linux/fs.h>
@@ -553,7 +563,7 @@ index 5b4e0a2..0dd75b6 100755
  #include <linux/sched.h>
  #include <linux/dcache.h>
  
-@@ -94,7 +95,7 @@ BPF_PERF_OUTPUT(events);
+@@ -93,7 +94,7 @@ BPF_PERF_OUTPUT(events);
  // Store timestamp and size on entry
  //
  
@@ -562,7 +572,7 @@ index 5b4e0a2..0dd75b6 100755
  int trace_rw_entry(struct pt_regs *ctx, struct kiocb *iocb)
  {
      u64 id = bpf_get_current_pid_tgid();
-@@ -280,12 +281,12 @@ TASK_COMM_LEN = 16      # linux/sched.h
+@@ -264,12 +265,12 @@ int trace_fsync_return(struct pt_regs *ctx)
  b = BPF(text=bpf_text)
  
  # common file functions
diff --git a/SOURCES/bcc-0.10.0-tools-fix-vfscount-output-when-no-duration-is-specif.patch b/SOURCES/bcc-0.10.0-tools-fix-vfscount-output-when-no-duration-is-specif.patch
new file mode 100644
index 0000000..84be464
--- /dev/null
+++ b/SOURCES/bcc-0.10.0-tools-fix-vfscount-output-when-no-duration-is-specif.patch
@@ -0,0 +1,62 @@
+From 0206fc4e3568eab6cacfc1d5916258a9ba764f5d Mon Sep 17 00:00:00 2001
+From: Jerome Marchand <jmarchan@redhat.com>
+Date: Mon, 5 Aug 2019 15:29:22 +0200
+Subject: [PATCH] tools: fix vfscount output when no duration is specified
+
+Since commit a2e71a9eb71a ("vfscount.py: add args time (#2344)"),
+vfscount does not show any output when it is interrupted by a key
+press, which is the only way out when no time limit is specified. I
+assume the exit() that has been added in the keyboard interrupt
+handler is there so that no output is displayed when the program has
+been interrupted early when a time limit has been specified. But since
+the tool still invite the user to use Ctrl-C to end the tracing in
+that case, it seems more consistent to show an output in that case
+too.
+
+This patch removes the exit() and the tools always show a result at
+the end. It also adds the duration argument to the synopsis and the
+option section in the man page.
+---
+ man/man8/vfscount.8 | 6 +++++-
+ tools/vfscount.py   | 1 -
+ 2 files changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/man/man8/vfscount.8 b/man/man8/vfscount.8
+index fbf0e89e..febbc9e6 100644
+--- a/man/man8/vfscount.8
++++ b/man/man8/vfscount.8
+@@ -2,7 +2,7 @@
+ .SH NAME
+ vfscount \- Count VFS calls ("vfs_*"). Uses Linux eBPF/bcc.
+ .SH SYNOPSIS
+-.B vfscount
++.B vfscount [duration]
+ .SH DESCRIPTION
+ This counts VFS calls. This can be useful for general workload
+ characterization of these operations.
+@@ -14,6 +14,10 @@ Edit the script to customize which functions to trace.
+ Since this uses BPF, only the root user can use this tool.
+ .SH REQUIREMENTS
+ CONFIG_BPF and bcc.
++.SH OPTIONS
++.TP
++duration
++duration of the trace in seconds.
+ .SH EXAMPLES
+ .TP
+ Count some VFS calls until Ctrl-C is hit:
+diff --git a/tools/vfscount.py b/tools/vfscount.py
+index b7c18efd..303d3fde 100755
+--- a/tools/vfscount.py
++++ b/tools/vfscount.py
+@@ -54,7 +54,6 @@ print("Tracing... Ctrl-C to end.")
+     sleep(interval)
+ except KeyboardInterrupt:
+     pass
+-    exit()
+ 
+ print("\n%-16s %-26s %8s" % ("ADDR", "FUNC", "COUNT"))
+ counts = b.get_table("counts")
+-- 
+2.20.1
+
diff --git a/SPECS/bcc.spec b/SPECS/bcc.spec
index 0e43fbb..b7aa384 100644
--- a/SPECS/bcc.spec
+++ b/SPECS/bcc.spec
@@ -10,16 +10,24 @@
 %endif
 
 Name:           bcc
-Version:        0.8.0
+Version:        0.10.0
 Release:        1%{?dist}
 Summary:        BPF Compiler Collection (BCC)
 License:        ASL 2.0
 URL:            https://github.com/iovisor/bcc
-Source0:        %{url}/archive/v%{version}/%{name}-%{version}.tar.gz
+# Generate source tarball until upstream bug is fixed
+# See https://github.com/iovisor/bcc/issues/2261
+# To generate the tarball, use the following commands
+# git clone -b "v0.10.0" --single-branch --depth 1 url bcc-0.10.0
+# pushd bcc-0.10.0
+# git submodule update --init
+# popd
+# tar zcvf bcc-0.10.0.tar.gz bcc-0.10.0/
+#Source0:        %{url}/archive/v%{version}/%{name}-%{version}.tar.gz
+Source0:        %{name}-%{version}.tar.gz
 Patch0:         link-against-libLLVM.so-instead-of-static-libs.patch
 Patch1:         Fix-tools-for-RHEL-7.patch
-# tests/cc doesn't compile on s390x, so disable it until we have a better fix
-Patch10:         Disable-tests-cc.patch
+Patch2:         %{name}-%{version}-tools-fix-vfscount-output-when-no-duration-is-specif.patch
 
 # Arches will be included as upstream support is added and dependencies are
 # satisfied in the respective arches
@@ -93,13 +101,7 @@ Requires:       kernel-devel
 Command line tools for BPF Compiler Collection (BCC)
 
 %prep
-%setup
-%patch0 -p1
-%patch1 -p1
-
-%ifarch s390x
-%patch10 -p1
-%endif
+%autosetup -p1
 
 %build
 %cmake . \
@@ -141,11 +143,11 @@ mv %{buildroot}%{_datadir}/%{name}/examples %{buildroot}%{_docdir}/%{name}/
 %doc README.md
 %license LICENSE.txt
 %{_libdir}/lib%{name}.so.*
-%{_libdir}/libbpf.so.*
+%{_libdir}/libbcc_bpf.so.*
 
 %files devel
 %{_libdir}/lib%{name}.so
-%{_libdir}/libbpf.so
+%{_libdir}/libbcc_bpf.so
 %{_libdir}/pkgconfig/lib%{name}.pc
 %{_includedir}/%{name}/
 
@@ -165,8 +167,20 @@ mv %{buildroot}%{_datadir}/%{name}/examples %{buildroot}%{_docdir}/%{name}/
 %exclude %{_datadir}/%{name}/tools/old/
 # inject relies on BPF_KPROBE_OVERRIDE which is absent on RHEL 7
 %exclude %{_datadir}/%{name}/tools/inject
+%exclude %{_datadir}/%{name}/tools/doc/inject_example.txt
+%exclude %{_mandir}/man8/inject.8
 # ZFS isn't available on RHEL
 %exclude %{_datadir}/%{name}/tools/zfs*
+%exclude %{_datadir}/%{name}/tools/doc/zfs*
+%exclude %{_mandir}/man8/zfs*
+# criticalstat relies on CONFIG_PREEMPTIRQ_EVENTS which is absent on RHEL 7
+%exclude %{_datadir}/%{name}/tools/criticalstat
+%exclude %{_datadir}/%{name}/tools/doc/criticalstat_example.txt
+%exclude %{_mandir}/man8/criticalstat.8
+# tcpstates relies on sock:inet_sock_set_state which is absent on RHEL 7
+%exclude %{_datadir}/%{name}/tools/tcpstates
+%exclude %{_datadir}/%{name}/tools/doc/tcpstates_example.txt
+%exclude %{_mandir}/man8/tcpstates.8
 %{_mandir}/man8/*
 
 %if %{with lua}
@@ -176,6 +190,11 @@ mv %{buildroot}%{_datadir}/%{name}/examples %{buildroot}%{_docdir}/%{name}/
 
 
 %changelog
+* Tue Aug 06 2019 Jerome Marchand <jmarchan@redhat.com> - 0.10.0-1
+- Rebase on bcc-0.10.0
+- Fix regression of vfscount
+- Drop tools that relies on features unavailable on RHEL 7
+
 * Mon Jan 28 2019 Jerome Marchand <jmarchan@redhat.com> - 0.8.0-1
 - Rebase on bcc-8.0.0
 - Update libLLVM.so name for 7.0