diff --git a/src/core/ext/transport/chttp2/transport/chttp2_transport.c b/src/core/ext/transport/chttp2/transport/chttp2_transport.c
index 9269611dd9dd2806cdb5770f87b3a274a0bfefd9..5c5175f56684441a8b5ea117f81f78db313d1ca0 100644
--- a/src/core/ext/transport/chttp2/transport/chttp2_transport.c
+++ b/src/core/ext/transport/chttp2/transport/chttp2_transport.c
@@ -1679,7 +1679,7 @@ void grpc_chttp2_maybe_complete_recv_message(grpc_exec_ctx *exec_ctx,
           grpc_slice_buffer_swap(&s->unprocessed_incoming_frames_buffer,
                                  &s->frame_storage);
         }
-        error = deframe_unprocessed_incoming_frames(
+        error = grpc_deframe_unprocessed_incoming_frames(
             exec_ctx, &s->data_parser, s,
             &s->unprocessed_incoming_frames_buffer, NULL, s->recv_message);
         if (error != GRPC_ERROR_NONE) {
@@ -2627,7 +2627,7 @@ static grpc_error *incoming_byte_stream_pull(grpc_exec_ctx *exec_ctx,
   grpc_chttp2_stream *s = bs->stream;
 
   if (s->unprocessed_incoming_frames_buffer.length > 0) {
-    grpc_error *error = deframe_unprocessed_incoming_frames(
+    grpc_error *error = grpc_deframe_unprocessed_incoming_frames(
         exec_ctx, &s->data_parser, s, &s->unprocessed_incoming_frames_buffer,
         slice, NULL);
     if (error != GRPC_ERROR_NONE) {
diff --git a/src/core/ext/transport/chttp2/transport/frame_data.c b/src/core/ext/transport/chttp2/transport/frame_data.c
index 5d382d80a8b7e6bec3719d0a827004ae8d6d9304..9aba3ea445d59a46e7df81d8fff2bfe192861428 100644
--- a/src/core/ext/transport/chttp2/transport/frame_data.c
+++ b/src/core/ext/transport/chttp2/transport/frame_data.c
@@ -112,12 +112,10 @@ void grpc_chttp2_encode_data(uint32_t id, grpc_slice_buffer *inbuf,
   stats->data_bytes += write_bytes;
 }
 
-grpc_error *deframe_unprocessed_incoming_frames(grpc_exec_ctx *exec_ctx,
-                                                grpc_chttp2_data_parser *p,
-                                                grpc_chttp2_stream *s,
-                                                grpc_slice_buffer *slices,
-                                                grpc_slice *slice_out,
-                                                grpc_byte_stream **stream_out) {
+grpc_error *grpc_deframe_unprocessed_incoming_frames(
+    grpc_exec_ctx *exec_ctx, grpc_chttp2_data_parser *p, grpc_chttp2_stream *s,
+    grpc_slice_buffer *slices, grpc_slice *slice_out,
+    grpc_byte_stream **stream_out) {
   grpc_error *error = GRPC_ERROR_NONE;
   grpc_chttp2_transport *t = s->t;
 
diff --git a/src/core/ext/transport/chttp2/transport/frame_data.h b/src/core/ext/transport/chttp2/transport/frame_data.h
index 2fb8983c38e6797641b625fb3ee2a84cd35f93a3..9ed4ad0f2184121fe638437b49f077ad0f2f36b9 100644
--- a/src/core/ext/transport/chttp2/transport/frame_data.h
+++ b/src/core/ext/transport/chttp2/transport/frame_data.h
@@ -90,11 +90,9 @@ void grpc_chttp2_encode_data(uint32_t id, grpc_slice_buffer *inbuf,
                              grpc_transport_one_way_stats *stats,
                              grpc_slice_buffer *outbuf);
 
-grpc_error *deframe_unprocessed_incoming_frames(grpc_exec_ctx *exec_ctx,
-                                                grpc_chttp2_data_parser *p,
-                                                grpc_chttp2_stream *s,
-                                                grpc_slice_buffer *slices,
-                                                grpc_slice *slice_out,
-                                                grpc_byte_stream **stream_out);
+grpc_error *grpc_deframe_unprocessed_incoming_frames(
+    grpc_exec_ctx *exec_ctx, grpc_chttp2_data_parser *p, grpc_chttp2_stream *s,
+    grpc_slice_buffer *slices, grpc_slice *slice_out,
+    grpc_byte_stream **stream_out);
 
 #endif /* GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FRAME_DATA_H */
diff --git a/src/objective-c/BoringSSL.podspec b/src/objective-c/BoringSSL.podspec
index 7880aad10ba124b9b54027bd32d6a6f18c915eac..651bd4977d81434b81aef9c9059d9a838327366e 100644
--- a/src/objective-c/BoringSSL.podspec
+++ b/src/objective-c/BoringSSL.podspec
@@ -31,7 +31,7 @@
 
 Pod::Spec.new do |s|
   s.name     = 'BoringSSL'
-  version = '8.1'
+  version = '8.2'
   s.version  = version
   s.summary  = 'BoringSSL is a fork of OpenSSL that is designed to meet Google’s needs.'
   # Adapted from the homepage:
@@ -113,7 +113,6 @@ Pod::Spec.new do |s|
   s.subspec 'Interface' do |ss|
     ss.header_mappings_dir = 'include/openssl'
     ss.source_files = 'include/openssl/*.h'
-    ss.exclude_files = 'include/openssl/arm_arch.h'
   end
   s.subspec 'Implementation' do |ss|
     ss.header_mappings_dir = '.'
@@ -150,6 +149,11 @@ Pod::Spec.new do |s|
       #include "ssl.h"
       #include "crypto.h"
       #include "aes.h"
+      /* The following macros are defined by base.h. The latter is the first file included by the    
+         other headers. */    
+      #if defined(OPENSSL_ARM) || defined(OPENSSL_AARCH64)    
+      #  include "arm_arch.h"   
+      #endif
       #include "asn1.h"
       #include "asn1_mac.h"
       #include "asn1t.h"
diff --git a/test/cpp/qps/client_sync.cc b/test/cpp/qps/client_sync.cc
index da17f6bf7bb34d31f767e37554d523ab3f8edc36..f8ce2cccbea6a88f3f5af94c32980cb7b11a29bb 100644
--- a/test/cpp/qps/client_sync.cc
+++ b/test/cpp/qps/client_sync.cc
@@ -167,7 +167,7 @@ class SynchronousStreamingClient final : public SynchronousClient {
         }
       });
     }
-    for (size_t i=0; i<num_threads_; i++) {
+    for (size_t i = 0; i < num_threads_; i++) {
       cleanup_threads[i].join();
     }
   }
diff --git a/tools/profiling/microbenchmarks/bm_diff.py b/tools/profiling/microbenchmarks/bm_diff.py
index ba0c225f6cc08cd9f53ca49581e3b0d1746c152c..f1b6ef1ab94b775831aa3e4ce5b8002be12de112 100755
--- a/tools/profiling/microbenchmarks/bm_diff.py
+++ b/tools/profiling/microbenchmarks/bm_diff.py
@@ -192,52 +192,59 @@ class Benchmark:
     return [self.final[f] if f in self.final else '' for f in flds]
 
 
-def read_file(filename):
+def eintr_be_gone(fn):
+  """Run fn until it doesn't stop because of EINTR"""
   while True:
     try:
-      with open(filename) as f:
-        return f.read()
+      return fn()
     except IOError, e:
       if e.errno != errno.EINTR:
         raise
 
+
 def read_json(filename):
-  return json.loads(read_file(filename))
-
-benchmarks = collections.defaultdict(Benchmark)
-
-for bm in args.benchmarks:
-  for loop in range(0, args.loops):
-    js_new_ctr = read_json('%s.counters.new.%d.json' % (bm, loop))
-    js_new_opt = read_json('%s.opt.new.%d.json' % (bm, loop))
-    js_old_ctr = read_json('%s.counters.old.%d.json' % (bm, loop))
-    js_old_opt = read_json('%s.opt.old.%d.json' % (bm, loop))
-
-    for row in bm_json.expand_json(js_new_ctr, js_new_opt):
-      print row
-      name = row['cpp_name']
-      if name.endswith('_mean') or name.endswith('_stddev'): continue
-      benchmarks[name].add_sample(row, True)
-    for row in bm_json.expand_json(js_old_ctr, js_old_opt):
-      print row
-      name = row['cpp_name']
-      if name.endswith('_mean') or name.endswith('_stddev'): continue
-      benchmarks[name].add_sample(row, False)
-
-really_interesting = set()
-for name, bm in benchmarks.items():
-  print name
-  really_interesting.update(bm.process())
-fields = [f for f in args.track if f in really_interesting]
-
-headers = ['Benchmark'] + fields
-rows = []
-for name in sorted(benchmarks.keys()):
-  if benchmarks[name].skip(): continue
-  rows.append([name] + benchmarks[name].row(fields))
-if rows:
-  text = 'Performance differences noted:\n' + tabulate.tabulate(rows, headers=headers, floatfmt='+.2f')
-else:
-  text = 'No significant performance differences'
-comment_on_pr.comment_on_pr('```\n%s\n```' % text)
-print text
+  with open(filename) as f: return json.loads(f.read())
+
+
+def finalize():
+  benchmarks = collections.defaultdict(Benchmark)
+
+  for bm in args.benchmarks:
+    for loop in range(0, args.loops):
+      js_new_ctr = read_json('%s.counters.new.%d.json' % (bm, loop))
+      js_new_opt = read_json('%s.opt.new.%d.json' % (bm, loop))
+      js_old_ctr = read_json('%s.counters.old.%d.json' % (bm, loop))
+      js_old_opt = read_json('%s.opt.old.%d.json' % (bm, loop))
+
+      for row in bm_json.expand_json(js_new_ctr, js_new_opt):
+        print row
+        name = row['cpp_name']
+        if name.endswith('_mean') or name.endswith('_stddev'): continue
+        benchmarks[name].add_sample(row, True)
+      for row in bm_json.expand_json(js_old_ctr, js_old_opt):
+        print row
+        name = row['cpp_name']
+        if name.endswith('_mean') or name.endswith('_stddev'): continue
+        benchmarks[name].add_sample(row, False)
+
+  really_interesting = set()
+  for name, bm in benchmarks.items():
+    print name
+    really_interesting.update(bm.process())
+  fields = [f for f in args.track if f in really_interesting]
+
+  headers = ['Benchmark'] + fields
+  rows = []
+  for name in sorted(benchmarks.keys()):
+    if benchmarks[name].skip(): continue
+    rows.append([name] + benchmarks[name].row(fields))
+  if rows:
+    text = 'Performance differences noted:\n' + tabulate.tabulate(rows, headers=headers, floatfmt='+.2f')
+  else:
+    text = 'No significant performance differences'
+  comment_on_pr.comment_on_pr('```\n%s\n```' % text)
+  print text
+
+
+eintr_be_gone(finalize)
+