As I understood in this wonderful answer, GPLv3 and GPLv2 code can't be used simultanously in the same product.
Both the GPLv2 and the GPLv3 have clauses that
Require the combined product to adhere to the license terms of the license of the GPL licensed component.
Require that no additional restrictions may be placed on the combined work:
from clause 6 of the GPLv2:
The GPLv3 has additional restrictions over the GPLv2, specifically, a patent grant and anti-tivoisation provisions, so 1 and 2 can't hold simultaneously.
To prevent this issue, the Free Software Foundation advises people who want to license their work under the GPL to use the following phrasing:
You can redistribute it and/or modify [the work] under the terms of the GNU General Public License as published by the Free Software Foundation, either version [x] of the License, or (at your option) any later version.
That way, you release your work under multiple licenses; the one you name explicitly, and any possible future version of the GPL. This makes the resuser free to use the software under any future version of the GPL, and this license incompatibility becomes a non-issue.
I currently have no statistics on how common this practice is. It is at any rate not the route Linux has chosen.
The creators of GPL recommend licensing software under "version X of the License, or (at your option) any later version".
If the GPLv2 licensed code has been licensed as per those instructions, then GPLv2 code is license compatible with GPLv3 code.
However some projects (including the Linux kernel) do not want the FSF to be able to add/remove arbitrary license restrictions to their software at some future point, and they remove the clause making it incompatible.
In that case, you cannot mix GPLv2 and GPLv3 code because the people who chose GPLv2 decided not to allow mixing them.