diff --git a/serial.c b/serial.c
index 63774a5e6485b4cf9c2b9de7278424f7b5229d2a..d076bc890389a89ce2591a41db29ab15a078bd7f 100644
--- a/serial.c
+++ b/serial.c
@@ -209,12 +209,25 @@ int serialport_config(fdtype fd, unsigned int baud)
 	if (observed.c_cflag != wanted.c_cflag ||
 	    observed.c_lflag != wanted.c_lflag ||
 	    observed.c_iflag != wanted.c_iflag ||
-	    observed.c_oflag != wanted.c_oflag ||
-	    cfgetispeed(&observed) != cfgetispeed(&wanted)) {
-		msg_perr("%s: Some requested options did not stick.\n", __func__);
-		return 1;
+	    observed.c_oflag != wanted.c_oflag) {
+		msg_pwarn("Some requested serial options did not stick, continuing anyway.\n");
+		msg_pdbg("          observed    wanted\n"
+			 "c_cflag:  0x%08lX  0x%08lX\n"
+			 "c_lflag:  0x%08lX  0x%08lX\n"
+			 "c_iflag:  0x%08lX  0x%08lX\n"
+			 "c_oflag:  0x%08lX  0x%08lX\n",
+			 (long)observed.c_cflag, (long)wanted.c_cflag,
+			 (long)observed.c_lflag, (long)wanted.c_lflag,
+			 (long)observed.c_iflag, (long)wanted.c_iflag,
+			 (long)observed.c_oflag, (long)wanted.c_oflag
+			);
+	}
+	if (cfgetispeed(&observed) != cfgetispeed(&wanted) ||
+	    cfgetospeed(&observed) != cfgetospeed(&wanted)) {
+		msg_pwarn("Could not set baud rates exactly.\n");
+		msg_pdbg("Actual baud flags are: ispeed: 0x%08lX, ospeed: 0x%08lX\n",
+			  (long)cfgetispeed(&observed), (long)cfgetospeed(&observed));
 	}
-	msg_pdbg("Baud rate is %d now.\n", entry->baud);
 #endif
 	return 0;
 }