android_kernel_xiaomi_sm8350/drivers
Andreas Mohr 93ad4fb04f [PATCH] pcnet_cs.c: IRQ handler optimization
During some performance diagnostics I stumbled on this slightly wasteful
code in pcnet_cs.c which I made the patch included at the bottom for (two
minor comment fixes included).

Improvement:
instead of *always* calculating
lea    0x2c0(%edx),%ebx
and then additionally doing the
mov    %edx,0xc0(%ebx)
addition *if we need it*,

we now do the *whole* calculation of
mov    %edx,0x380(%ebx)
*only* if we need it.
This even manages to save us a whole 16-byte alignment buffer loss
in this compilation case.

Result: slightly improves IRQ handler performance in both shared and
non-shared IRQ case, which should make my rusty P3/700 a slight bit happier.

Thank you for your support,

Andreas Mohr

old asm result (using gcc 3.3.5):

000015a0 <ei_irq_wrapper>:
    15a0:       55                      push   %ebp
    15a1:       89 e5                   mov    %esp,%ebp
    15a3:       53                      push   %ebx
    15a4:       8d 9a c0 02 00 00       lea    0x2c0(%edx),%ebx
    15aa:       e8 fc ff ff ff          call   15ab <ei_irq_wrapper+0xb>
    15af:       83 f8 01                cmp    $0x1,%eax
    15b2:       74 03                   je     15b7 <ei_irq_wrapper+0x17>
    15b4:       5b                      pop    %ebx
    15b5:       5d                      pop    %ebp
    15b6:       c3                      ret
    15b7:       31 d2                   xor    %edx,%edx
    15b9:       89 93 c0 00 00 00       mov    %edx,0xc0(%ebx)
    15bf:       eb f3                   jmp    15b4 <ei_irq_wrapper+0x14>
    15c1:       eb 0d                   jmp    15d0 <ei_watchdog>
    15c3:       90                      nop
    15c4:       90                      nop
    15c5:       90                      nop
    15c6:       90                      nop
    15c7:       90                      nop
    15c8:       90                      nop
    15c9:       90                      nop
    15ca:       90                      nop
    15cb:       90                      nop
    15cc:       90                      nop
    15cd:       90                      nop
    15ce:       90                      nop
    15cf:       90                      nop

000015d0 <ei_watchdog>:

new asm result:

000015a0 <ei_irq_wrapper>:
    15a0:       55                      push   %ebp
    15a1:       89 e5                   mov    %esp,%ebp
    15a3:       53                      push   %ebx
    15a4:       89 d3                   mov    %edx,%ebx
    15a6:       e8 fc ff ff ff          call   15a7 <ei_irq_wrapper+0x7>
    15ab:       83 f8 01                cmp    $0x1,%eax
    15ae:       74 03                   je     15b3 <ei_irq_wrapper+0x13>
    15b0:       5b                      pop    %ebx
    15b1:       5d                      pop    %ebp
    15b2:       c3                      ret
    15b3:       31 d2                   xor    %edx,%edx
    15b5:       89 93 80 03 00 00       mov    %edx,0x380(%ebx)
    15bb:       eb f3                   jmp    15b0 <ei_irq_wrapper+0x10>
    15bd:       8d 76 00                lea    0x0(%esi),%esi

000015c0 <ei_watchdog>:

Signed-off-by: Andrew Morton <akpm@osdl.org>
2005-06-26 18:24:00 -04:00
..
acorn [PATCH] I2C: Kill address ranges in non-sensors i2c chip drivers 2005-06-21 21:51:48 -07:00
acpi [PATCH] suspend/resume SMP support 2005-06-25 16:24:32 -07:00
atm [ATM]: [drivers] kill pointless NULL checks and casts before kfree() 2005-06-02 13:04:07 -07:00
base [PATCH] generate hotplug events for cpu online 2005-06-25 16:24:31 -07:00
block Merge Christoph's freeze cleanup patch 2005-06-25 17:16:53 -07:00
bluetooth [PATCH] Convert users to tty_unregister_ldisc() 2005-06-23 09:45:36 -07:00
cdrom [PATCH] drivers/cdrom/cm206.c: cleanups 2005-06-25 16:25:07 -07:00
char Merge 'drm-3264' branch of rsync://rsync.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6 2005-06-26 09:55:39 -07:00
cpufreq [PATCH] sysfs: (rest) if show/store is missing return -EIO 2005-06-20 15:15:03 -07:00
crypto
dio [PATCH] Driver Core: drivers/base - drivers/i2c/chips/adm1026.c: update device attribute callbacks 2005-06-20 15:15:32 -07:00
eisa [PATCH] Driver Core: drivers/base - drivers/i2c/chips/adm1026.c: update device attribute callbacks 2005-06-20 15:15:32 -07:00
fc4 fc4/fc: fix warnings and errors related to recent SCSI EH updates 2005-06-19 21:47:56 -04:00
firmware [PATCH] kfree cleanups for drivers/firmware/ 2005-06-25 16:25:06 -07:00
i2c [PATCH] I2C-MPC: Remove OCP device model support 2005-06-25 16:24:27 -07:00
ide [PATCH] IDE CD reports current speed 2005-06-23 09:45:35 -07:00
ieee1394 [PATCH] Cleanup patch for process freezing 2005-06-25 17:10:13 -07:00
infiniband [PATCH] sysfs: (rest) if show/store is missing return -EIO 2005-06-20 15:15:03 -07:00
input Merge Christoph's freeze cleanup patch 2005-06-25 17:16:53 -07:00
isdn [PATCH] drivers/isdn/hisax/: possible cleanups 2005-06-25 16:25:07 -07:00
macintosh [PATCH] Cleanup patch for process freezing 2005-06-25 17:10:13 -07:00
mca [PATCH] unexport mca_find_device_by_slot 2005-06-25 16:24:56 -07:00
md [PATCH] Cleanup patch for process freezing 2005-06-25 17:10:13 -07:00
media Merge Christoph's freeze cleanup patch 2005-06-25 17:16:53 -07:00
message [PATCH] tpm: device attribute fixes 2005-06-24 00:05:29 -07:00
misc [PATCH] ibmasm driver: fix race in command refcount logic 2005-06-21 19:07:35 -07:00
mmc [PATCH] Driver Core: drivers/i2c/chips/w83781d.c - drivers/s390/block/dcssblk.c: update device attribute callbacks 2005-06-20 15:15:34 -07:00
mtd
net [PATCH] pcnet_cs.c: IRQ handler optimization 2005-06-26 18:24:00 -04:00
nubus
oprofile [PATCH] oprofile: report anonymous region samples 2005-06-24 00:06:27 -07:00
parisc
parport [PATCH] parport: NetMos nm9855 fix 2005-06-23 09:45:27 -07:00
pci [PATCH] PCI: fix show_modalias() function due to attribute change 2005-06-20 15:28:51 -07:00
pcmcia [PATCH] Cleanup patch for process freezing 2005-06-25 17:10:13 -07:00
pnp [PATCH] Cleanup patch for process freezing 2005-06-25 17:10:13 -07:00
s390 [PATCH] s390: debug feature changes 2005-06-25 16:24:37 -07:00
sbus
scsi [PATCH] drivers/scsi/dpt*: remove version.h dependencies 2005-06-25 16:25:03 -07:00
serial [PATCH] serial/68328serial: replace schedule_timeout() with msleep_interruptible() 2005-06-25 16:25:10 -07:00
sh [PATCH] Driver Core: drivers/s390/net/qeth_sys.c - drivers/usb/gadget/pxa2xx_udc.c: update device attribute callbacks 2005-06-20 15:15:35 -07:00
sn [PATCH] ioc4: PCI bus speed detection 2005-06-21 18:46:32 -07:00
tc
telephony [PATCH] kfree cleanups in ixj.c 2005-06-25 16:25:06 -07:00
usb [PATCH] Cleanup patch for process freezing 2005-06-25 17:10:13 -07:00
video [PATCH] drivers/video/matrox/matroxfb_misc.c: remove dead code 2005-06-25 16:25:04 -07:00
w1 [PATCH] Cleanup patch for process freezing 2005-06-25 17:10:13 -07:00
zorro [PATCH] Driver Core: drivers/usb/input/aiptek.c - drivers/zorro/zorro-sysfs.c: update device attribute callbacks 2005-06-20 15:15:35 -07:00
Kconfig [PATCH] ioc4: CONFIG split 2005-06-21 18:46:32 -07:00
Makefile [PATCH] ioc4: CONFIG split 2005-06-21 18:46:32 -07:00