By Chris Stanton
Last Updated: 01/01/70 1:00am
Zinedine Zidane scored in his last home game for Real, while Cadiz were relegated.
Real Madrid drew 3-3 with Villarreal in a richly-entertaining clash at El Bernabeu.
Julio Baptista volleyed emphatically to give Real the lead in the 22nd minute but the scores were level when Alvaro Mejia put through his own net just eight minutes later.
The UEFA Champions League semi-finalists then took the lead in the 40th minute through Diego Forlan.
Zinedine Zidane, in his last home match on home soil for Real, levelled on 67 minutes but six minutes from time the match took another twist to put Villarreal very much in the driving seat.
Sergio Ramos deliberately handled in the area to receive a straight red card and gift The Yellow Submarine a penalty which was duly converted by Forlan for his second goal of the game.
But Baptista was not to be denied and two minutes he hauled Real level.
Earlier in the day a late turnaround from Racing Santander severely dented Osasuna's UEFA Champions League aspirations as the visitors slipped to a 2-1 defeat late on.
Savo Milosevic had given his side the lead in the 55th minute but Pablo Alfaro (79) and Antonito (87) left the Liga's surprise package clinging on to fourth place with Sevilla, who are three points behind in fifth, having a game in hand.
At the bottom of La Liga, Cadiz's 3-1 defeat at Getafe confirmed the visitors' relegation.
Lucas Lobos appeared to have handed Cadiz a lifeline in the 20th minute but the strugglers endured a torrid second half.
Ruben Polido (70), Sergio Pachon (80) and Riki (90) scoring the goals which condemned Cadiz.
Alaves's survival hopes are only marginally more rosy after a disappointing 3-0 defeat at Real Zaragoza.
Diego Milito put the hosts into the lead in the 58th minute with Savio converting a 67th minute penalty and Oscar Gonzalez (74) rounding off the scoring.
Celta Vigo will be grateful of earning a 2-2 draw at Real Sociedad after finding themselves a man down and two goals adrift at half time.
Sociedad received a sixth minute penalty which was converted by Xabier Prieto. Jesus Perera's frustration at the penalty award boiled over and he promptly received his marching orders.
Morten Skoubo doubled his side's lead in the 38th minute to leave Celta Vigo with a mountain to climb.
But Fernando Baiano's nine-minute brace in the second half - the first a penalty in the 47th minute - earned the draw.
Elsewhere, Real Betis beat Real Mallorca 2-1. Guillermo Pereyra put through his own net for Mallorca in the 21st minute and Robert de Pinho de Souza doubled the lead before Yordi claimed a consolation in the 59th minute.
In the day's final game, Athletic Bilbao came from a goal down to defeat Deportivo La Coruna 2-1.
Javier Arizmendi appeared to have put Depor on course for the three points in the 19th minute at Estadio Riazor.
However Javier Casas equalised in the 70th minute and Pablo Orbaiz's 86th minute penalty wrapped up the win for the visitors.
Click below for individual match summaries:
Deportivo La Coruna 1-2 Athletic Bilbao
Getafe 3-1 Cadiz
Racing Santander 2-1 Osasuna
Real Betis 2-1 Mallorca
Real Madrid 3-3 Villarreal
Real Sociedad 2-2 Celta Vigo
Real Zaragoza 3-0 CD Alaves