diff --git a/base.cabal b/base.cabal
--- a/base.cabal
+++ b/base.cabal
@@ -1,6 +1,10 @@
 cabal-version:  3.0
+
+-- WARNING: ghc-experimental.cabal is automatically generated from ghc-experimental.cabal.in
+-- Make sure you are editing ghc-experimental.cabal.in, not ghc-experimental.cabal
+
 name:           base
-version:        4.20.0.1
+version:        4.20.1.0
 -- NOTE: Don't forget to update ./changelog.md
 
 license:        BSD-3-Clause
@@ -26,7 +30,7 @@
     default-language: Haskell2010
     default-extensions: NoImplicitPrelude
     build-depends:
-        ghc-internal >= 9.1001 && < 9.1002,
+        ghc-internal == 9.1002.*,
         ghc-prim,
 
     exposed-modules:
diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,5 +1,12 @@
 # Changelog for [`base` package](http://hackage.haskell.org/package/base)
 
+## 4.20.1 *Jan 2025*
+  * Shipped with GHC 9.10.2
+  * `setNonBlockingMode` will no longer throw an exception when called on a FD associated with a unknown device type. ([CLC proposal #282](https://github.com/haskell/core-libraries-committee/issues/282))
+  * Propagate HasCallStack from `errorCallWithCallStackException` to exception backtraces, fixing a bug in the implementation of [CLC proposal #164](https://github.com/haskell/core-libraries-committee/issues/164).
+  * Modify the implementation of `Control.Exception.throw` to avoid call-sites being inferred as diverging via precise exception.
+    ([GHC #25066](https://gitlab.haskell.org/ghc/ghc/-/issues/25066), [CLC proposal #290](https://github.com/haskell/core-libraries-committee/issues/290))
+
 ## 4.20.0.1 *May 2024*
   * Not shipped with any GHC: This is a documentation only release to fix various issues with base-4.20.0.0 docs due to the GHC internal split
   * For an accounting of the issues fixed, see [#24875](https://gitlab.haskell.org/ghc/ghc/-/issues/24875)
diff --git a/src/Control/Exception/Backtrace.hs b/src/Control/Exception/Backtrace.hs
--- a/src/Control/Exception/Backtrace.hs
+++ b/src/Control/Exception/Backtrace.hs
@@ -7,8 +7,43 @@
 -- Stability   :  internal
 -- Portability :  non-portable (GHC Extensions)
 --
--- Mechanisms for collecting diagnostic backtraces and their representation.
+-- This module provides the 'Backtrace'\ s type, which provides a
+-- common representation for backtrace information which can be, e.g., attached
+-- to exceptions (via the 'Control.Exception.Context.ExceptionContext' facility).
+-- These backtraces preserve useful context about the execution state of the program
+-- using a variety of means; we call these means *backtrace mechanisms*.
 --
+-- We currently support four backtrace mechanisms:
+--
+--  - 'CostCentreBacktrace' captures the current cost-centre stack
+--    using 'GHC.Stack.CCS.getCurrentCCS'.
+--  - 'HasCallStackBacktrace' captures the 'HasCallStack' 'CallStack'.
+--  - 'ExecutionBacktrace' captures the execution stack, unwound and resolved
+--    to symbols via DWARF debug information.
+--  - 'IPEBacktrace' captures the execution stack, resolved to names via info-table
+--    provenance information.
+--
+-- Each of these are useful in different situations. While 'CostCentreBacktrace's are
+-- readily mapped back to the source program, they require that the program be instrumented
+-- with cost-centres, incurring runtime cost. Similarly, 'HasCallStackBacktrace's require that
+-- the program be manually annotated with 'HasCallStack' constraints.
+--
+-- By contrast, 'IPEBacktrace's incur no runtime instrumentation but require that (at least
+-- some subset of) the program be built with GHC\'s @-finfo-table-map@ flag. Moreover, because
+-- info-table provenance information is derived after optimisation, it may be harder to relate
+-- back to the structure of the source program.
+--
+-- 'ExecutionBacktrace's are similar to 'IPEBacktrace's but use DWARF stack unwinding
+-- and symbol resolution; this allows for useful backtraces even in the presence
+-- of foreign calls, both into and out of Haskell. However, for robust stack unwinding
+-- the entirety of the program (and its dependencies, both Haskell and native) must
+-- be compiled with debugging information (e.g. using GHC\'s @-g@ flag).
+
+
+-- Note [Backtrace mechanisms]
+-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-- See module docstring above.
+
 
 module Control.Exception.Backtrace
     ( -- * Backtrace mechanisms
diff --git a/src/Data/Char.hs b/src/Data/Char.hs
--- a/src/Data/Char.hs
+++ b/src/Data/Char.hs
@@ -42,7 +42,7 @@
     , digitToInt
     , intToDigit
 
-    -- * GHC.Internal.Numeric representations
+    -- * Numeric representations
     , ord
     , chr
 
diff --git a/src/Data/Functor/Product.hs b/src/Data/Functor/Product.hs
--- a/src/Data/Functor/Product.hs
+++ b/src/Data/Functor/Product.hs
@@ -29,7 +29,6 @@
 import GHC.Internal.Data.Data (Data)
 import Data.Functor.Classes
 import GHC.Generics (Generic, Generic1)
-import GHC.Internal.Text.Read ()
 import Prelude
 
 -- | Lifted product of functors.
diff --git a/src/Data/Functor/Sum.hs b/src/Data/Functor/Sum.hs
--- a/src/Data/Functor/Sum.hs
+++ b/src/Data/Functor/Sum.hs
@@ -26,7 +26,6 @@
 import GHC.Internal.Data.Data (Data)
 import Data.Functor.Classes
 import GHC.Generics (Generic, Generic1)
-import GHC.Internal.Text.Read ()
 import Prelude
 
 -- | Lifted sum of functors.
diff --git a/src/Data/Kind.hs b/src/Data/Kind.hs
--- a/src/Data/Kind.hs
+++ b/src/Data/Kind.hs
@@ -19,6 +19,5 @@
      FUN
      ) where
 
-import GHC.Num.BigNat () -- for build ordering (#23942)
 import GHC.Prim (FUN)
 import GHC.Types (Type, Constraint)
diff --git a/src/Data/Semigroup.hs b/src/Data/Semigroup.hs
--- a/src/Data/Semigroup.hs
+++ b/src/Data/Semigroup.hs
@@ -85,7 +85,7 @@
   , First(..)
   , Last(..)
   , WrappedMonoid(..)
-  -- * Re-exported monoids from GHC.Internal.Data.Monoid
+  -- * Re-exported monoids
   , Dual(..)
   , Endo(..)
   , All(..)
diff --git a/src/GHC/ConsoleHandler.hs b/src/GHC/ConsoleHandler.hs
--- a/src/GHC/ConsoleHandler.hs
+++ b/src/GHC/ConsoleHandler.hs
@@ -19,6 +19,7 @@
 
 module GHC.ConsoleHandler () where
 
+-- See W1 of Note [Tracking dependencies on primitives] in GHC.Internal.Base
 import Prelude () -- for build ordering
 
 #else
diff --git a/src/GHC/Constants.hs b/src/GHC/Constants.hs
--- a/src/GHC/Constants.hs
+++ b/src/GHC/Constants.hs
@@ -1,5 +1,6 @@
 -- TODO: Deprecate
 module GHC.Constants where
 
-import GHC.Base () -- dummy dependency
+-- See W1 of Note [Tracking dependencies on primitives] in GHC.Internal.Base
+import GHC.Types () -- for build ordering
 
diff --git a/src/GHC/Exts.hs b/src/GHC/Exts.hs
--- a/src/GHC/Exts.hs
+++ b/src/GHC/Exts.hs
@@ -14,6 +14,9 @@
 --
 -- Note: no other @base@ module should import this module.
 
+-- See Note [Where do we export PrimOps] for details about how to expose primops
+-- to users.
+
 module GHC.Exts
     (-- **  Pointer types
      Ptr(..),
diff --git a/src/GHC/IO/Encoding/CodePage.hs b/src/GHC/IO/Encoding/CodePage.hs
--- a/src/GHC/IO/Encoding/CodePage.hs
+++ b/src/GHC/IO/Encoding/CodePage.hs
@@ -5,6 +5,7 @@
 
 module GHC.IO.Encoding.CodePage ( ) where
 
+-- See W1 of Note [Tracking dependencies on primitives] in GHC.Internal.Base
 import Prelude () -- for build ordering
 
 #else
diff --git a/src/Prelude.hs b/src/Prelude.hs
--- a/src/Prelude.hs
+++ b/src/Prelude.hs
@@ -47,11 +47,11 @@
 
     -- ** Numbers
 
-    -- *** GHC.Internal.Numeric types
+    -- *** Numeric types
     Int, Integer, Float, Double,
     Rational, Word,
 
-    -- *** GHC.Internal.Numeric type classes
+    -- *** Numeric type classes
     Num((+), (-), (*), negate, abs, signum, fromInteger),
     Real(toRational),
     Integral(quot, rem, div, mod, quotRem, divMod, toInteger),
@@ -63,7 +63,7 @@
               encodeFloat, exponent, significand, scaleFloat, isNaN,
               isInfinite, isDenormalized, isIEEE, isNegativeZero, atan2),
 
-    -- *** GHC.Internal.Numeric functions
+    -- *** Numeric functions
     subtract, even, odd, gcd, lcm, (^), (^^),
     fromIntegral, realToFrac,
 
