Plucky Birmingham hit back from a stunning two-goal blow by Jermain Defoe early on and were level by half- time.
But Alex McLeish’s men had no answer when big Icelander Hreidarsson poked his third goal of the season — before substitute Kanu finished the visitors off in stoppage-time.
Defoe, who could suffer the heartache of missing two Wembley finals having played for Tottenham in both the Carling Cup and the FA Cup before joining Pompey, appeared to have won the game for his new team with two goals inside the first eight minutes.
He opened the scoring from the penalty spot in the sixth minute, confidently converting after defender David Murphy handled a cross by Milan Baros.
Two minutes later he notched a typical poacher’s goal, his fifth for the club and 12th this season.
But battling Birmingham came bouncing back to level matters before the break with former Arsenal pair Fabrice Muamba and Sebastian Larsson doing the damage.
The visitors replied instantly when Liam Ridgewell went forward to nod on a corner by Larsson — and Muamba reacted quickest to stab a shot past David James.
And Larsson curled a delicious free-kick out of James’ reach to put them level.
Four minutes after the interval the visitors’ defence buckled again when Ridgewell failed to clear a long, dipping free-kick from Muntari — aimed at the considerable figure of Diop — and allowed Hreidarsson to score.
Birmingham brought on James McFadden for Zarate just after the hour but Redknapp sharpened up his resources with the introduction of Lassana Diarra and Kanu.
City substitute Cameron Jerome came closest to equalising again, with a shot from Larsson’s cross bringing a fine save out of the evergreen James.
And, right at the end, Kanu polished off the visitors when he dived to head in Pedro Mendes cross — his first goal since October.
James, Johnson, Campbell, Distin, Hreidarsson, Diop (Diarra 62), Muntari, Pedro Mendes, Kranjcar, Baros (Kanu 72), Defoe (Lauren 85).
Maik Taylor, Kelly, Jaidi, Ridgewell, Murphy, McSheffrey, Johnson, Muamba, Larsson, Forssell (Jerome 73), Zarate (McFadden 61).
Steve Tanner (Somerset).