= likely() and unlikely() =

In Linux kernel code, one often find calls to `likely()` and `unlikely()`, in conditions, like :

{{{
bvl = bvec_alloc(gfp_mask, nr_iovecs, &idx);
if (unlikely(!bvl)) {
  mempool_free(bio, bio_pool);
  bio = NULL;
  goto out;
}
}}}

In fact, these functions are hints for the compiler that allows it to correctly optimize the branch, by knowing which is the likeliest one. The definitions of these macros, found in `include/linux/compiler.h` are the following :

{{{
#define likely(x)       __builtin_expect(!!(x), 1)
#define unlikely(x)     __builtin_expect(!!(x), 0)
}}}

The GCC documentation explains the role of `__builtin_except()` :