Larsson karierę rozpoczynał w klubie Eskilstuna City FK. Później był graczem IFK Eskilstuna. W 2001 roku, mając 16 lat trafił do juniorów angielskiegoArsenalu. Tam występował do 2004 roku. Wówczas został przesunięty do pierwszej drużyny Arsenalu. W jej barwach zadebiutował 27 października 2004 w wygranym 2-1 meczu Pucharu Ligi Angielskiej z Manchesterem City. W sezonie 2004/2005 w rozgrywkach Pucharu Ligi Angielskiej zagrał w sumie trzy razy. W następnym sezonie zanotował pierwszy występ w Premier League. Było to 1 lutego 2006 w przegranym 2-3 pojedynku z West Ham United. Przez cały sezon wystąpił tam w trzech meczach.
W sierpniu 2006 został wypożyczony do drugoligowegoBirmingham City. Zadebiutował tam 5 sierpnia 2006 w przegranym 1-2 spotkaniu z Colchesterem United. 19 sierpnia 2006 strzelił pierwszego gola w zawodowej karierze. Było to w wygranym 2-1 pojedynku z Crystal Palace. W Birmingham Larsson szybko wywalczył sobie miejsce w wyjściowej jedenastce. W styczniu 2007 został wykupiony przez ten klub z Arsenalu. W kwietniu 2007 w meczu z Sheffield Wednesday zdobył bramkę, która została później uznana golem sezonu. Na koniec sezonu 2006/2007 zajął z klubem drugie miejsce w lidze i awansował z nim do ekstraklasy. Będąc zawodnikiem Birmingham strzelił pierwszego gola w trakcie gry w Premier League. Było to 2 grudnia 2007 w wygranym 3-2 spotkaniu z Tottenham Hotspur. W ciągu całego sezonu 2007/2008 w lidze rozegrał 35 spotkań i zdobył sześć bramek. Na koniec rozgrywek ligowych uplasował się z zespołem na przedostatniej, dziewiętnastej pozycji i powrócił z nim do drugiej ligi. Już w kolejnym sezonie powrócili do Premier League. W 2011 roku zagrał w finale meczu o Puchar Ligi Angielskiej w którym Birmingham pokonało Arsenal F.C. 2:1. Jednocześnie w sezonie 2010/2011 Birmingham spadło z ligi, a Larssonowi wygasł kontrakt i na zasadzie wolnego transferu przeniósł się do Sunderlandu[2].
W Sunderlandzie występował przez 6 sezonów w ciągu których zaliczył łącznie 176 występów ligowych. Sezon 2016/2017 zakończył się spadkiem dla jego drużyny i po raz kolejny na zasadzie wolnego transferu zmienił barwy klubowe podpisując roczną umowę z Hull City[3]. W nowej drużynie zadebiutował 12 sierpnia 2017 w wygranym 4:1 meczu z Burton Albion F.C.. Po zakończeniu sezonu w którym rozegrał łącznie 40 meczów ligowych trafił do AIK Fotboll[4]. Po powrocie do Szwecji wraz ze swoim klubem wywalczył mistrzostwo kraju w sezonie 2018.
Larsson jest reprezentantem Szwecji. Pierwsze powołanie do kadry otrzymał w 2007 roku na mecze eliminacji Euro 2008 z Liechtensteinem oraz Irlandią Północną. W drużynie narodowej zadebiutował 6 lutego 2008 w bezbramkowo zremisowanym towarzyskim meczu z Turcją. Był uczestnikiem Mistrzostw Europy w 2008 roku. Ten turniej jego drużyna zakończył na fazie grupowej, a on sam na Euro rozegrał jedno spotkanie (przegrany 1-2 mecz z Hiszpanią). Podczas kolejnych Mistrzostw Europy w 2012 roku wystąpił we wszystkich meczach grupowych, jednak szwedzka kadra po raz kolejny zakończyła udział na fazie grupowej. W 2018 roku po raz pierwszy w karierze pojechał na Mistrzostwa Świata. Reprezentacja Szwecji dotarła w nich do ćwierćfinału, a Larsson nie zagrał jedynie w meczu 1/8 finału przeciwko Szwajcarii, ponieważ był zawieszony za nadmiar żółtych kartek.