aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhpa <hpa>2005-01-18 13:13:50 +0000
committerhpa <hpa>2005-01-18 13:13:50 +0000
commit15088eec8155b23f6768a6412229300b56f8bffb (patch)
tree80987103489d9dab3e7ee808fb92d7945cc7ec0e
parented930458b2e84f3976f41739bfa3cbf1b9d1e448 (diff)
downloadsyslinux-3.08-pre2.tar.gz
syslinux-3.08-pre2.tar.xz
syslinux-3.08-pre2.zip
Fix calculation of I/O block size in SYSLINUXsyslinux-3.08-pre2
-rw-r--r--NEWS3
-rw-r--r--cache.inc2
-rw-r--r--ldlinux.asm10
-rw-r--r--version2
-rw-r--r--writehex.inc1
-rw-r--r--writestr.inc9
6 files changed, 20 insertions, 7 deletions
diff --git a/NEWS b/NEWS
index 6d59b670..6b0bc189 100644
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,9 @@ Starting with 1.47, changes marked with SYSLINUX/PXELINUX/ISOLINUX
apply to that specific program only; other changes apply to all of
them.
+Changes in 3.08:
+ * SYSLINUX: Fix performance regression (-s mode always enabled.)
+
Changes in 3.07:
* Fix chainloading (chain.c32).
* Fix zlib build problem.
diff --git a/cache.inc b/cache.inc
index 9a0825ea..1da7c8fb 100644
--- a/cache.inc
+++ b/cache.inc
@@ -43,6 +43,7 @@ getcachesector:
loop .search
.miss:
+ TRACER 'M'
; Need to load it. Highly inefficient cache replacement
; algorithm: Least Recently Written (LRW)
push bx
@@ -66,6 +67,7 @@ getcachesector:
ret
.hit: ; We have it; get the pointer
+ TRACER 'H'
sub si,CachePtrs
shl si,SECTOR_SHIFT-2
pop cx
diff --git a/ldlinux.asm b/ldlinux.asm
index 77e3e982..baa7cca3 100644
--- a/ldlinux.asm
+++ b/ldlinux.asm
@@ -1208,6 +1208,7 @@ getfssec_edx:
push eax
.getfragment:
xor ebp,ebp ; Fragment sector count
+ push edx ; Starting sector pointer
.getseccnt:
inc bp
dec cx
@@ -1215,19 +1216,20 @@ getfssec_edx:
xor eax,eax
mov ax,es
shl ax,4
- add ax,bx ; Now DI = how far into 64K block we are
+ add ax,bx ; Now AX = how far into 64K block we are
not ax ; Bytes left in 64K block
inc eax
shr eax,SECTOR_SHIFT ; Sectors left in 64K block
cmp bp,ax
jnb .do_read ; Unless there is at least 1 more sector room...
- lea eax,[edx+1] ; Linearly next sector
+ mov eax,edx ; Current sector
+ inc edx ; Predict it's the linearly next sector
call nextsector
jc .do_read
- cmp edx,eax
+ cmp edx,eax ; Did it match?
jz .getseccnt
.do_read:
- mov eax,edx
+ pop eax ; Starting sector pointer
call getlinsecsr
lea eax,[eax+ebp-1] ; This is the last sector actually read
shl bp,9
diff --git a/version b/version
index e449dd2a..6fe94f3c 100644
--- a/version
+++ b/version
@@ -1 +1 @@
-3.07
+3.08
diff --git a/writehex.inc b/writehex.inc
index bcb7868d..f99f8306 100644
--- a/writehex.inc
+++ b/writehex.inc
@@ -17,6 +17,7 @@
;; Write hexadecimal numbers to the console
;;
+ section .text
;
; writehex[248]: Write a hex number in (AL, AX, EAX) to the console
;
diff --git a/writestr.inc b/writestr.inc
index 4bfbe24b..46d2aa14 100644
--- a/writestr.inc
+++ b/writestr.inc
@@ -21,8 +21,13 @@
;
; crlf: Print a newline
;
-crlf: mov si,crlf_msg
- ; Fall through
+crlf: push ax
+ mov al,CR
+ call writechr
+ mov al,LF
+ call writechr
+ pop ax
+ ret
;
; cwritestr: write a null-terminated string to the console, saving