count keyword only arguments as part of the total
diff --git a/Lib/test/test_extcall.py b/Lib/test/test_extcall.py
index a5af50b..cf882a5 100644
--- a/Lib/test/test_extcall.py
+++ b/Lib/test/test_extcall.py
@@ -280,6 +280,12 @@
     Traceback (most recent call last):
       ...
     TypeError: f() takes exactly 1 argument (5 given)
+    >>> def f(a, *, kw):
+    ...    pass
+    >>> f(6, 4, kw=4)
+    Traceback (most recent call last):
+      ...
+    TypeError: f() takes exactly 2 arguments (3 given)
 """
 
 import sys
diff --git a/Python/ceval.c b/Python/ceval.c
index 22c6155..0bd785b 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -3078,8 +3078,8 @@
 				    "argument%s (%d given)",
 				    co->co_name,
 				    defcount ? "at most" : "exactly",
-				    co->co_argcount,
-				    co->co_argcount == 1 ? "" : "s",
+				    total_args,
+				    total_args == 1 ? "" : "s",
 				    argcount + kwcount);
 				goto fail;
 			}