BMW recalls 312,000 cars