After beginning his career at hometown club IFK Eskilstuna, Larsson was signed by Arsenal. He made three appearances for the Gunners, before joining Birmingham City, initially on loan for the 2006–07 season, before a permanent transfer in the summer of 2007. Larsson spent five years at Birmingham, experiencing promotion to, and relegation from, the Premier League on two occasions. He joined Sunderland on 1 July 2011 upon the expiry of his contract, after Birmingham suffered relegation. Larsson is renowned for being a set-piece specialist.
A full international since 2008, Larsson played for Sweden at the European Championship in 2008 and 2012.