GM swings to $2.8 billion Q4 profit