Villareal and Real Madrid advanced to the semi-finals of the Champions League on Tuesday night following aggregate wins over Bayern Munich and Chelsea respectively,
Karim Benzema scored all of Madrid's goals in the 3-1 win in the first leg on 6 April in west London.
But 15 minutes into the second leg, Mason Mount gave the defending champions the lead.
And six minutes into the second-half Antonio Rudiger scored their second to make it 3-3 on aggregate.
With organisers Uefa scrapping the rule that give away goals double value in the event of a draw on aggregate, it meant the tie would go to extra time.
But Timo Werner added Chelsea's third with 15 minutes left to give them a 4-3 aggregate lead and put the pressure onto Madrid.
The hosts responded five minutes later through Rodrygo to set up extra-time with the tie at 4-4.
Six minutes into the first period, Benzema nodded home to restore the aggregate advantage. It was his fourth goal of the tie.
And Chelsea could not find a way through.
Madrid will play either Manchester City or Atletico Madrid for a place in the final at the Stade de France just outside Paris in May.
City play in the Spanish capital on Wednesday night nursing a 1-0 advantage from the first leg on 5 April.
Villareal will take on Liverpool or Benfica in the other semi after drawing 1-1 at the Allianz Arena against Bayern Munich.
Shock
Bayern, who won the trophy in 2020, went into the game trailing by a goal from the first leg at the Estadio de la Cerámica
But after a barren first half, Robert Lewandowski scored for the hosts to bring the tie level on aggregate.
But with two minutes remaining, substitute Samuel Chukwueze swept home the equaliser to put Villareal ahead 2-1 on aggregate.
Despite some late frantic attacking, Villareal held firm to advance to the semi-finals for the first time since 2006.