kernel-ark/include/linux
Andi Kleen a586df067a x86: Support __attribute__((__cold__)) in gcc 4.3
gcc 4.3 supports a new __attribute__((__cold__)) to mark functions cold. Any
path directly leading to a call of this function will be unlikely. And gcc
will try to generate smaller code for the function itself.

Please use with care. The code generation advantage isn't large and in most
cases it is not worth uglifying code with this.

This patch marks some common error functions like panic(), printk()
as cold.  This will longer term make many unlikely()s unnecessary, although
we can keep them for now for older compilers.

BUG is not marked cold because there is currently no way to tell
gcc to mark a inline function told.

Also all __init and __exit functions are marked cold. With a non -Os
build this will tell the compiler to generate slightly smaller code
for them. I think it currently only uses less alignments for labels,
but that might change in the future.

One disadvantage over *likely() is that they cannot be easily instrumented
to verify them.

Another drawback is that only the latest gcc 4.3 snapshots support this.
Unfortunately we cannot detect this using the preprocessor. This means older
snapshots will fail now. I don't think that's a problem because they are
unreleased compilers that nobody should be using.

gcc also has a __hot__ attribute, but I don't see any sense in using
this in the kernel right now. But someday I hope gcc will be able
to use more aggressive optimizing for hot functions even in -Os,
if that happens it should be added.

Includes compile fix from Thomas Gleixner.

Cc: Jan Hubicka <jh@suse.cz>
Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2007-07-21 18:37:08 -07:00
..
amba
byteorder
dvb
hdlc
isdn
lockd
mlx4
mmc
mtd
netfilter
netfilter_arp
netfilter_bridge
netfilter_ipv4
netfilter_ipv6
nfsd knfsd: clean up EX_RDONLY 2007-07-19 10:04:52 -07:00
raid
rtc
spi
sunrpc SUNRPC: move bkl locking and xdr proc invocation into a common helper 2007-07-19 15:21:39 -04:00
tc_act
tc_ematch
usb
8250_pci.h
a.out.h
ac97_codec.h
acct.h
acpi_pmtmr.h
acpi.h x86_64: various cleanups in NUMA scan node 2007-07-21 18:37:08 -07:00
adb.h
adfs_fs_i.h
adfs_fs_sb.h
adfs_fs.h
aer.h
affs_hardblocks.h
agp_backend.h
agpgart.h
aio_abi.h
aio.h
amifd.h
amifdreg.h
amigaffs.h
anon_inodes.h
apm_bios.h
apm-emulation.h
arcdevice.h
arcfb.h
async_tx.h async_tx: fix kmap_atomic usage in async_memcpy 2007-07-20 08:44:19 -07:00
ata.h ide: add PIO masks 2007-07-20 01:11:59 +02:00
atalk.h
atm_eni.h
atm_he.h
atm_idt77105.h
atm_nicstar.h
atm_suni.h
atm_tcp.h
atm_zatm.h
atm.h
atmapi.h
atmarp.h
atmbr2684.h
atmclip.h
atmdev.h
atmel_pdc.h
atmioc.h
atmlec.h
atmmpc.h
atmppp.h
atmsap.h
atmsvc.h
attribute_container.h
audit.h
auto_fs4.h
auto_fs.h
auxvec.h
ax25.h
b1lli.h
b1pcmcia.h
backing-dev.h
backlight.h
baycom.h
bcd.h
bfs_fs.h
binfmts.h
bio.h
bit_spinlock.h
bitmap.h
bitops.h
bitrev.h
blkdev.h
blkpg.h
blktrace_api.h
blockgroup_lock.h
bootmem.h
bottom_half.h
bpqether.h
bsg.h
buffer_head.h
bug.h
cache.h
calc64.h
capability.h
capi.h
cciss_ioctl.h
cd1400.h
cdev.h
cdk.h
cdrom.h
cfag12864b.h
chio.h
circ_buf.h
clk.h
clockchips.h clockevents: fix resume logic 2007-07-21 17:49:15 -07:00
clocksource.h [IA64] Convert to generic timekeeping/clocksource 2007-07-20 11:22:30 -07:00
cm4000_cs.h
cn_proc.h
coda_cache.h
coda_fs_i.h
coda_linux.h coda: remove CODA_STORE/CODA_RELEASE upcalls 2007-07-21 17:49:14 -07:00
coda_psdev.h coda: remove CODA_STORE/CODA_RELEASE upcalls 2007-07-21 17:49:14 -07:00
coda.h
coff.h
com20020.h
compat.h
compiler-gcc3.h
compiler-gcc4.h x86: Support __attribute__((__cold__)) in gcc 4.3 2007-07-21 18:37:08 -07:00
compiler-gcc.h
compiler-intel.h
compiler.h x86: Support __attribute__((__cold__)) in gcc 4.3 2007-07-21 18:37:08 -07:00
completion.h
comstats.h
concap.h
configfs.h
connector.h
console_struct.h
console.h
consolemap.h
const.h
cpu.h
cpufreq.h
cpumask.h
cpuset.h
cramfs_fs_sb.h
cramfs_fs.h
crash_dump.h
crc7.h
crc16.h
crc32.h
crc32c.h
crc-ccitt.h
crc-itu-t.h
crypto.h
cryptohash.h
ctype.h
cuda.h
cyclades.h
cyclomx.h
cycx_cfm.h
cycx_drv.h
cycx_x25.h
dcache.h
dccp.h
dcookies.h [CELL] oprofile: add support to OProfile for profiling CELL BE SPUs 2007-07-20 21:42:24 +02:00
debug_locks.h
debugfs.h
delay.h
delayacct.h
device-mapper.h
device.h
devpts_fs.h
dio.h
dirent.h
display.h
dlm_device.h
dlm_netlink.h
dlm.h
dm9000.h
dm-ioctl.h
dma-mapping.h
dmaengine.h
dmapool.h
dmi.h
dn.h
dnotify.h
dqblk_v1.h
dqblk_v2.h
dqblk_xfs.h
ds1wm.h
ds1286.h
ds17287rtc.h
dtlk.h
edac.h drivers/edac: mod assert_error check 2007-07-19 10:04:54 -07:00
edd.h
eeprom_93cx6.h
efi.h
efs_dir.h
efs_fs_i.h
efs_fs_sb.h
efs_fs.h
efs_vh.h
eisa.h
elevator.h
elf-em.h [CELL] oprofile: add support to OProfile for profiling CELL BE SPUs 2007-07-20 21:42:24 +02:00
elf-fdpic.h
elf.h
elfcore.h
elfnote.h
err.h
errno.h
errqueue.h
etherdevice.h
ethtool.h
eventfd.h
eventpoll.h
exportfs.h
ext2_fs_sb.h
ext2_fs.h
ext3_fs_i.h
ext3_fs_sb.h
ext3_fs.h
ext3_jbd.h
ext4_fs_extents.h
ext4_fs_i.h
ext4_fs_sb.h
ext4_fs.h
ext4_jbd2.h
fadvise.h
falloc.h
fault-inject.h
fb.h
fcdevice.h
fcntl.h
fd1772.h
fd.h
fddidevice.h
fdreg.h
fib_rules.h
file.h
filter.h
firewire-cdev.h
firewire-constants.h
firmware.h
flat.h
font.h
freezer.h
fs_enet_pd.h
fs_stack.h
fs_struct.h
fs_uart_pd.h
fs.h
fsl_devices.h
fsnotify.h
fuse.h
futex.h
gameport.h
gen_stats.h
genalloc.h
generic_acl.h
generic_serial.h
genetlink.h
genhd.h
getcpu.h
gfp.h
gfs2_ondisk.h
gigaset_dev.h
gpio_keys.h
gpio_mouse.h
hardirq.h
harrier_defs.h
hash.h
hayesesp.h
hdlc.h
hdlcdrv.h
hdpu_features.h
hdreg.h
hdsmart.h
hid-debug.h
hid.h
hiddev.h
highmem.h
highuid.h
hil_mlc.h
hil.h
hippidevice.h
hp_sdc.h
hpet.h
hrtimer.h
htirq.h
hugetlb.h
hw_random.h
hwmon-sysfs.h
hwmon-vid.h
hwmon.h
hysdn_if.h
i2c-algo-bit.h
i2c-algo-pca.h
i2c-algo-pcf.h
i2c-algo-sgi.h
i2c-dev.h
i2c-gpio.h
i2c-id.h [ALSA] ASoC S3C24xx machine drivers - I2C ID for LM4857 2007-07-20 11:11:16 +02:00
i2c-ocores.h
i2c-pnx.h
i2c-pxa.h
i2c.h Merge branch 'release' of git://lm-sensors.org/kernel/mhoffman/hwmon-2.6 2007-07-19 14:24:57 -07:00
i2o-dev.h
i2o.h mm: Remove slab destructors from kmem_cache_create(). 2007-07-20 10:11:58 +09:00
i8k.h
ibmtr.h
icmp.h
icmpv6.h
ide.h ide: add PIO masks 2007-07-20 01:11:59 +02:00
idr.h
ieee80211.h
if_addr.h
if_arcnet.h
if_arp.h
if_bonding.h
if_bridge.h
if_cablemodem.h
if_ec.h
if_eql.h
if_ether.h
if_fc.h
if_fddi.h
if_frad.h
if_hippi.h
if_infiniband.h
if_link.h
if_ltalk.h
if_macvlan.h
if_packet.h
if_plip.h
if_ppp.h
if_pppol2tp.h
if_pppox.h
if_shaper.h
if_slip.h
if_strip.h
if_tr.h
if_tun.h
if_tunnel.h
if_vlan.h
if_wanpipe.h
if.h
igmp.h
in6.h
in_route.h
in.h
inet_diag.h
inet.h
inetdevice.h
init_task.h
init.h x86: Support __attribute__((__cold__)) in gcc 4.3 2007-07-21 18:37:08 -07:00
initrd.h
inotify.h
input-polldev.h
input.h
interrupt.h
io.h
ioc3.h
ioc4.h
ioctl.h
ioport.h
ioprio.h cfq: async queue allocation per priority 2007-07-20 10:06:38 +02:00
ip6_tunnel.h
ip.h
ipc.h
ipmi_msgdefs.h
ipmi_smi.h
ipmi.h
ipsec.h
ipv6_route.h
ipv6.h
ipx.h
irda.h
irq_cpustat.h
irq.h
irqflags.h
irqreturn.h
isa.h
isapnp.h
isdn_divertif.h
isdn_ppp.h
isdn.h
isdnif.h
isicom.h
iso_fs.h
istallion.h
ixjuser.h
jbd2.h
jbd.h
jffs2.h
jhash.h
jiffies.h
journal-head.h
joystick.h
kallsyms.h
kbd_diacr.h
kbd_kern.h
Kbuild
kd.h
kdebug.h
kdev_t.h
kernel_stat.h
kernel.h x86: Support __attribute__((__cold__)) in gcc 4.3 2007-07-21 18:37:08 -07:00
kernelcapi.h
kexec.h
key-ui.h
key.h
keyboard.h
keyctl.h
kfifo.h
klist.h
kmalloc_sizes.h
kmod.h
kobj_map.h
kobject.h
kprobes.h
kref.h
ks0108.h
kthread.h
ktime.h
kvm_para.h
kvm.h
lapb.h
latency.h
lcd.h
leds.h
lguest_bus.h lguest: the guest code 2007-07-19 10:04:52 -07:00
lguest_launcher.h lguest: the host code 2007-07-19 10:04:52 -07:00
lguest.h lguest: the host code 2007-07-19 10:04:52 -07:00
libata.h libata: implement EH fast drain 2007-07-20 08:26:26 -04:00
libps2.h
license.h
limits.h
linkage.h
linux_logo.h
list.h
llc.h
lm_interface.h
lock_dlm_plock.h
lockdep.h lockstat: measure lock bouncing 2007-07-19 10:04:49 -07:00
log2.h
loop.h
lp.h
lzo.h
m41t00.h
m48t86.h
magic.h
major.h
matroxfb.h
mbcache.h
mc6821.h
mc146818rtc.h
mca-legacy.h
mca.h
memory_hotplug.h
memory.h
mempolicy.h
mempool.h
meye.h
migrate.h
mii.h
minix_fs.h
miscdevice.h
mm_inline.h
mm_types.h
mm.h
mman.h
mmtimer.h
mmzone.h
mnt_namespace.h
mod_devicetable.h
module.h
moduleloader.h
moduleparam.h
mount.h
mpage.h
mqueue.h
mroute.h
msdos_fs.h
msg.h
msi.h
mtio.h
mutex-debug.h
mutex.h
mv643xx.h
n_r3964.h
namei.h
nbd.h
ncp_fs_i.h
ncp_fs_sb.h
ncp_fs.h
ncp_mount.h
ncp_no.h
ncp.h
neighbour.h
net.h
netdevice.h
netfilter_arp.h
netfilter_bridge.h
netfilter_decnet.h
netfilter_ipv4.h
netfilter_ipv6.h
netfilter.h
netlink.h
netpoll.h
netrom.h
nfs2.h
nfs3.h
nfs4_acl.h
nfs4_mount.h
nfs4.h
nfs_fs_i.h
nfs_fs_sb.h
nfs_fs.h SUNRPC: Clean up the sillyrename code 2007-07-19 15:21:39 -04:00
nfs_idmap.h
nfs_mount.h
nfs_page.h
nfs_xdr.h SUNRPC: Clean up the sillyrename code 2007-07-19 15:21:39 -04:00
nfs.h
nfsacl.h
nfsd_idmap.h
nl80211.h
nls.h
nmi.h
node.h
nodemask.h
notifier.h
nsc_gpio.h
nsproxy.h
nubus.h
numa.h
nvram.h
of_device.h Begin consolidation of of_device.h 2007-07-20 13:41:56 +10:00
of_platform.h Create drivers/of/platform.c 2007-07-20 14:25:51 +10:00
of.h Split out common parts of prom.h 2007-07-20 13:10:22 +10:00
oom.h
oprofile.h [CELL] oprofile: add support to OProfile for profiling CELL BE SPUs 2007-07-20 21:42:24 +02:00
page-flags.h move page writeback acounting out of macros 2007-07-19 10:04:52 -07:00
pagemap.h
pagevec.h
param.h
parport_pc.h
parport.h
parser.h
pata_platform.h
patchkey.h
pci_hotplug.h
pci_ids.h include/linux/pci_id.h: add amd northbridge defines 2007-07-19 10:04:55 -07:00
pci_regs.h
pci-acpi.h
pci.h
pcieport_if.h
pda_power.h
percpu_counter.h
percpu.h
personality.h
pfkeyv2.h
pfn.h
pg.h
phantom.h
phonedev.h
phy.h
pid_namespace.h
pid.h
pipe_fs_i.h
pkt_cls.h
pkt_sched.h
pktcdvd.h
platform_device.h
plist.h
pm_legacy.h
pm.h
pmu.h
pnp.h
pnpbios.h
poison.h
poll.h
posix_acl_xattr.h
posix_acl.h
posix_types.h
posix-timers.h
power_supply.h
ppdev.h
ppp_channel.h
ppp_defs.h
ppp-comp.h
prctl.h
preempt.h
prefetch.h
prio_tree.h
proc_fs.h
profile.h
ps2esdi.h
ptrace.h
qnx4_fs.h
qnxtypes.h
quicklist.h
quota.h
quotaio_v1.h
quotaio_v2.h
quotaops.h
radeonfb.h
radix-tree.h
raid_class.h
ramfs.h
random.h
raw.h
rbtree.h
rcupdate.h
reboot.h
reciprocal_div.h
reiserfs_acl.h
reiserfs_fs_i.h
reiserfs_fs_sb.h
reiserfs_fs.h
reiserfs_xattr.h
relay.h
resource.h
resume-trace.h
rfkill.h
rio_drv.h
rio_ids.h
rio_regs.h
rio.h
rmap.h
romfs_fs.h
root_dev.h
rose.h
route.h
rslib.h
rtc-v3020.h
rtc.h
rtmutex.h
rtnetlink.h
rwsem-spinlock.h
rwsem.h
rxrpc.h
sc26198.h
scatterlist.h
scc.h
sched.h [PATCH] sched: implement cpu_clock(cpu) high-speed time source 2007-07-19 21:28:35 +02:00
screen_info.h
sctp.h
scx200_gpio.h
scx200.h
sdla.h
seccomp.h
securebits.h
security.h
selection.h
selinux_netlink.h
selinux.h
sem.h
seq_file.h
seqlock.h
serial167.h
serial_8250.h
serial_core.h
serial_pnx8xxx.h
serial_reg.h
serial.h
serialP.h
serio.h
shm.h
shmem_fs.h
signal.h
signalfd.h
skbuff.h
slab_def.h
slab.h Fix ZERO_OR_NULL_PTR(ZERO_SIZE_PTR) 2007-07-20 12:33:44 -07:00
slob_def.h
slub_def.h fix gfp_t annotations for slub 2007-07-20 08:24:50 -07:00
sm501-regs.h
sm501.h
smb_fs_i.h
smb_fs_sb.h
smb_fs.h
smb_mount.h
smb.h
smbno.h
smp_lock.h
smp.h
snmp.h
socket.h
sockios.h
som.h
sonet.h
sony-laptop.h
sonypi.h
sort.h
sound.h
soundcard.h
spinlock_api_smp.h
spinlock_api_up.h
spinlock_types_up.h fix raw_spinlock_t vs lockdep 2007-07-19 10:04:49 -07:00
spinlock_types.h fix raw_spinlock_t vs lockdep 2007-07-19 10:04:49 -07:00
spinlock_up.h
spinlock.h
splice.h
srcu.h
stacktrace.h stacktrace: fix header file for !CONFIG_STACKTRACE 2007-07-19 10:04:49 -07:00
stallion.h
start_kernel.h
stat.h
statfs.h
stddef.h
stop_machine.h
string.h
stringify.h
superhyway.h
suspend.h
svga.h
swap.h
swapops.h
synclink.h
sys.h
syscalls.h [CELL] spufs: extension of spu_create to support affinity definition 2007-07-20 21:42:15 +02:00
sysctl.h
sysdev.h
sysfs.h
sysrq.h
sysv_fs.h
task_io_accounting_ops.h
task_io_accounting.h
taskstats_kern.h
taskstats.h
tc.h
tcp.h
telephony.h
termios.h
textsearch_fsm.h
textsearch.h
tfrc.h
thread_info.h
threads.h
ticable.h
tick.h
tifm.h
time.h NTP: move the cmos update code into ntp.c 2007-07-21 17:49:15 -07:00
timer.h
timerfd.h
times.h
timex.h [IA64] remove time interpolator 2007-07-20 11:23:02 -07:00
tiocl.h
tipc_config.h
tipc.h
topology.h
toshiba.h
transport_class.h
trdevice.h
tsacct_kern.h
tty_driver.h
tty_flip.h
tty_ldisc.h
tty.h
types.h
uaccess.h
udf_fs_i.h
udf_fs_sb.h
udf_fs.h
udp.h
ufs_fs_i.h
ufs_fs_sb.h
ufs_fs.h
uinput.h
uio_driver.h
uio.h
ultrasound.h
umem.h
un.h
unistd.h
unwind.h
usb_gadget.h
usb_sl811.h
usb_usual.h
usb.h
usbdevice_fs.h
user_namespace.h user namespace: fix copy_user_ns return value 2007-07-19 14:05:08 -07:00
user.h
utime.h
uts.h
utsname.h
vermagic.h
vfs.h
via.h
video_decoder.h
video_encoder.h
video_output.h
videodev2.h V4L/DVB (5867): videodev2.h: add missing <sys/time.h> for userspace 2007-07-20 17:35:52 -03:00
videodev.h
videotext.h
vmalloc.h
vmstat.h
vt_buffer.h
vt_kern.h
vt.h
wait.h
wanrouter.h
watchdog.h
wireless.h
workqueue.h
writeback.h
x25.h
xattr.h
xfrm.h
yam.h
zconf.h
zlib.h
zorro_ids.h
zorro.h
zutil.h